- We change the stream iterator to *always* return a grapheme
(except for EOF). The grapheme then gets built up over time.
- This way, trans flag for example is first white flag, then
white flag + zwj, etc until it finally transforms into the
trans flag.
- Users of the stream library can then use the `modification?'
flag to determine if the stream value is a modification of the
prior grapheme instead of a new grapheme.
- Abstracted iteration to an iterator object to support use cases
where we don't have an input stream (reflow needs this!)