Add parser

Adding a working recursive-descent parser. It will parse a correct
program nicely. Error recovery is still a work in progress. A quick and
dirty pretty printing visitor pattern has been created to help verify
that the parser has generated the correct ASTs.