[WIP] Refactor AST/Type class hierarchy. Add line info to all AST nodes. Use type objects throughout the type table. Improve typedef errors.

### Parser:
* AST and Type nodes are decorated with line info during parsing.

### AST/Type:
* Renaming: `type.py ->  typesem.py`
* Moved all AST nodes to `ast.py`
* `Tdef` nodes: Replace `name` attribute (`string`) with a `type` (`User`) attribute for easier semantic analysis and better error reporting.
* Refactor and extend node hierarchy to eliminate duplication and enable "pythonic" use of AST nodes.

### Typesem:
* Rewrite of `Table`:
  * Don't create new `Type` objects; reuse AST nodes.
  * Store type info using only dictionaries; leverage `__eq__` and `__hash__` of the respective AST nodes.
  * Simplify code: use `try` blocks instead of double checking.
  * Allow cross-referencing of user-defined types and constructors to ease type inference.
* Errors now contain line full line info, including previous definitions, etc.

### misc:
* Add a bunch of docsrings.
* Fix some `pylint` warnings.