Intermediate pass for unresolved types.

During the "Massive Rewrite" (e6948ebb43106d66326426acf5c550ed3b80cb82)
I ripped out the intermediate stage that held unresolved AST nodes
before they were injected into SymbolTables. Sadly this was a huge mistake
as I had no forward-references / co-recursive data-structures in the test
data.

Normally this would not be hard to add in as a second pass, but the immutable
nature of the const DataType* owned by SymbolTables makes this approach (and
the other ideas listed in previous commit logs) impossible. The purpose of
keeping immutable, canonical types in the tables has been a fluffy intuition
until today, but after a bit of thought (and reading around) this removes
aliasing of types from the system - thus calculating and removing a large
isomorphism over programs. This is very desirable to keep as it will make
analysers over the results much more powerful - and doing some background
reading it seems to be a decidable problem, the only issue will be cutting
cycles in the definitions of co-recursive structures (which I know how to
do).

But this does mean that we need to store unresolved type information that can
be rebuilt from canoncial references (and also to handle atomic operations
over type-cycles). This has caused state-pollution through the build module
as I've needed to store these list of partially constructed types.