optimized Graphemes iterator

Switched to one big lookup table for the grapheme break category.
This saves table searching substantially.

Cache the result of table lookups from one iteration to the next.
Otherwise, we would look up most characters twice.