Did some final repairs.

Letter replacement and utime are now working properly.
Refactor rules.

Move classes into their own files and simplify objects. `On` fields now
have their own parsing class.
Continued refactoring.

Further simplified classes.
Continued refacotring.

Moved a lot of data generation into its own class.
More data generator cleanup.
Data object cleanup and comments.
Cleaned up parsing and added comments.
Simplified data calculation.

Added some missing tests around time changes to ensure that limits times
are being properly calculated.