Reduce the size of String.Graphemes module
Reduce the size of String.Graphemes module

Based on a suggestion @krestenkrab and an initial implementation
proposed in #1902, we can reduce the total size of the String.Graphemes
beam file by ensuring the function clauses for next_grapheme are
similar.

We have done this by implementing next_grapheme in a tail recursive
fashion and using binary_part to select the first bits. The end result
is a consistently 33% faster graphemes operation for ascii strings
and only 10% slower operation for heavy unicode strings (which may
be further optimazable).

beedub/elixir,kelvinst/elixir,pedrosnk/elixir,lexmag/elixir,kelvinst/elixir,joshprice/elixir,antipax/elixir,beedub/elixir,antipax/elixir,elixir-lang/elixir,kimshrier/elixir,kimshrier/elixir,lexmag/elixir,gfvcastro/elixir,ggcampinho/elixir,gfvcastro/elixir,pedrosnk/elixir,michalmuskala/elixir,ggcampinho/elixir