codegen: restructure, remove recursion
also provides support for using a different code_native format,
as a fallback, later we'll want to make this more configurable
there are now several primary interfaces to native code:
- codegen: mostly internal, support for translating IR to LLVM
- jitlayers: manages compilation passes, especially at runtime
- aotcompile: support for managing external code
- disasm: pretty-printer for code objects
- debuginfo: tracking for unwind info
also removes the global type caches and
move all codegen pass handling to aotcompile.cpp