Added annotations to the parser.

The unannotated expression can be accessed using Statement#underlying and all annotations for a statement can be collected using Statement#annotations.
- Optimized AST by replacing defs with vals where possible.
- Added @unchecked to ErrorNode() to suppress pattern matching warnings.