Start defining a VM to help analyze the intersection algorithms
Refactor Lexer and add support for indentation-based lexing.

This moves the definition of the lexer into the parser. Ideally, the lexer will be its own module; however, it needs some more generalization before that can be done.