Many functions relied on next_grapheme, which would traverse the whole string generating a lot of graphemes as garbage along the way. This commit introduces next_grapheme_size, which returns the size in bytes of the next grapheme, avoiding the generation of the garbage and optimizing functions that need just the byte_size. Functions optimized are: String.at, String.split_at, String.slice and String.length.