Major overhaul of parser.

Wrote a new expression grammar and a much better organized parser
for it. The new parser supports operator precedence.

I was going to parse all operators with the same precedence and
associativity and then re-parse expressions at a later stage,
similar to how GHC works. This would have allowed user-defined
operators to have user-defined precedence and associativity. I
changed my mind and decided that operator precedence should be
fixed in the grammar.

User-defined operators are also always binary.
Add unit tests for Lexer
Made "identifiers" that start with 1-9 or _ invalid tokens

Previously, strings like "_foo" and "12bar" were tokenized as
[InvalidToken "_", Identifier "foo] and [FloatLiteral 12,
Identifier "bar"] respectively. These are now both tokenized as a
single InvalidToken.