Implement Applicative and Alternative for parsers.

Reduces code size of the parser a bit and cleans up some things pretty
nicely.
Add wrapping combinator.
Clean up the AST representation.

Remove a few unnecessary types and add the expression type.
Add a few useful combinators.