[WIP] Improve type.Table. Validate types.

### Parse:
* Remove all semantic checks.

### Type:
* 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.
* Add type validation in seperate class.
* Fix bad line info in error message.

### Tests:
* Add complete suite of unit tests for `type` module.
* DRY using the new API.
Rewrote it using hand-made `smartdicts`. It looks much better, IMHO.

I don't want to use a `TDef` because it is not a `Type` node.