Feature pragma defer

This adds support for pragmas to the language. The 'defer' pragma ended up not being feasible, and there are no pragmas currently implemented. However, having the pragma infrastructure in place is good. This PR also has a nice refactor of the compiler infrastructure.