Recover properly from the case where a method declaration has failed due to name clashes.
Store scopes in the AST instead of the symbol table object.
Move symbol -> declaration mapping from the symbol table to the symbols themselves.
Get rid of the SymbolTable class. All information is now stored on the AST.