Adds more documentation to the code. Some of it still needs more commenting (such as the Lexer)