update .chars and .codepoints to be variant aware

won’t emit by default unless passed an option hash

NOTE: we lost memorization on these with this change, since they now
accept an arg.
fix .find_by_str for variant support

This one ended up being quite complex to support, and requires adding a
.chars method and a String mixin module to make the code easier to read
and keep it expressive.  Hopefully won’t cause a big performance
regression.
make sure there is always an instance var for variations

better workaround for inconsistency in iamcal/emoji-data#4

instead of wrapping the accessor, just make sure there is always an
empty instance var for `variations` during initialization, that way if
the value is missing from the JSON we don’t run into problems later
with other things that expect it to be there.