Break out compiler.cpp into sub-components

I moved most of compiler.cpp into separate files in src/codegen/compiler/*.  This should decrease the cognitive load of puzzling out what "compiler" does.  In the future, it will make it significantly easier to right unit tests for parts of the compiler.  It also opens up the possibility of making incremental rebuilds in compiler significantly faster.

I also merged all of the various definitions of abort, assert, and expect - using the magic of templates.