Modularizing LLVM codegen/JIT

This clear implementation of A3 makes a lot of sense to me in terms of functionality and simplicity