support for incomplete types during compilation.
all previous tests pass but new tests are needed to make sure
this didn't introduce bugs.
some tests for incomplete types and bugfixes.
__staticinitialize now runs after the first time the type is complete.
inside a staticinitialize function it is possible to use types that have not
had their static initializers run.
Merge branch 'master' into incomplete