Remove Begin/EndScope (not required?).
Refactor TypeChecker to accommodate division into several phases.
Basic detection of references to uninitialized locals.
Add SyntaxElement node to error message information.
Ensure that errors about uninitialized locals are only reported once per local variable declaration.
Change the cyclic inheritance error message.
Refactor semantic checks.

- Check for uninitialized local variables is now a part
  of the type checking phase.
- There is a separate reference checking phase that also
  annotates the AST with types and other relevant information
  used by the type checker.