Multi-file support

This makes it possible to compile different .3 files independently, using import to tie them together.  This required a major, major change to the c codegen.  Its now a lot better, and includes lots of tests.  But, there are a few things that worked before, but aren't finished now.

Also took the time to implement pch support, which reduces compilation time by about half.
Merge branch 'feature/multi-file-support'