AST: Improve class hierarchy. Add some docstrings.
Type: Rename module to typesem. Change imports accordingly.
AST, Typesem: Move AST nodes concerning types to ast module. Simplify class hierarchy.
AST: Further refactor the class hierachy.
AST, Parser, Typesem: Explicitly embed a User node in TDef nodes.
Typesem: Refactor Table

* Minimize the information duplication by directly storing AST nodes.
* Utilize the equality induced from the AST class hierarchy.
* Use dicts insted of sets to allow node retrieval.
* Use try-catch expressions instead of double-checking.
* On type redefinition, report position of first definition.