Expand the scanner to support a few more token types.

This is the basics of whitespace-sensitive tokenization and some initial
reserved words. It needs a bunch more token types to fully support the
language, and it needs to be refactored a bit so it can easily be used
to write unit tests and to integrate it with a parser.