Additional support for internationalization

Refactor character and sequence rules into single classes that accept character data as input.
Added common character data in CharacterData and SequenceData classes.

Suggestion in #22. It only goes halfway (`SequenceData` and related enum TBD), but I'm happy to finish the work if you like it. I think it separates implementation from interface more cleanly, and still keeps with extensibility and avoids class bloat.