Moving to tokenize

Tests pass.  Some of the stuff I changed might need refactoring.
@bifodus as I'm sure you're aware, `.exec()` can return null.  Are we sure that it will never return null here?