Refined grammar and boosted parser performance.

I made sure the grammar properly handled logic and arithmetic
precedence.
I fixed some ambiguities.
I optimized the tokenizer to use one large regular expression.
Code generation now only takes place after the expression is matched
from the top down.
There are now checks to make sure a handler is provided for every
expression type.
A check is performed to look for trailing characters after the parser
returns.