Finishes AST parser implementation.
Applies more refactoring and code cleanup.
Implements ASTWriter, which prints a human readable
version of the AST to a given writer. This is strictly for
debugging.