templateized LLVMCodeGenBase, a lot of boiler plate is now handled with templates