feat(parser): Add new AST based parser

The evaluation of the AST nodes is deliberately left out of this
change to keep it as simple as possible, but if you're interested
I do have a full implementation of it.

It probably makes sense to rewrite the static parser generator to
use the new AST visiting support -- so I'll probably do that as
the next step to start cutting down on the dependencies on the old
parser.

Once the new lexer lands there are a number of ways to improve
parsing performance through changes to the token representation.