Support lookup for emoji with multiple codepoints

This is an alternative attempt at the issue raised in #2. 

For starters, `encode` now calls to `encode_io` to de-duplicate code.

Instead of picking the first emoji we see, we look and select a set of potential emoji. We attempt a lookahead to the next item in the sequence and try to narrow down the emoji result set.

This is quite buggy and needs to be tested more thoroughly.