Rework contexts to be namespace-aware
Rework contexts to be namespace-aware

Instead of containing their own hierarchical symbol tables, backend
contexts are now responsible for encapsulating the namespace context.

In addition, type verification has been refactored out of the backend
context, and is now the responsibility of a new VerificationContext.
This was necessary because it is now harder to track which names belong
to a given namespace, so the backend now has to register any defined
types and values before it checks them.

adamnew123456/spc,adamnew123456/spc