Enable ghc compiler optimizations

We use -O2 to enable all "safe" optimizations. Compilation time isn't
really an issue given the size of the program.
Completion of grammar rules, passes some tests

I have yet to run all the tests, but it parses the "tiny" test program
perfectly (which despite its name, is quite large).

The lexer has been extended to support limited one-to-one
transformations (applied directly after regex matching), which we now
use to differentiate between keywords and identifiers (which can cause
some parsing issues with definitions otherwise).

The rest of the tests still need to be run (which hopefully should all
pass), and an alternate command-line parser will need to be constructed
that can take `-single-dash` arguments instead of `--double-dash`
`--gnu-style` ones (which are superior IMO).
Remove Token type-checking functions

I ended up using pattern matching everywhere instead of conditionals, so
they were never used in the parser.