Switch to use a per-compile LLVMContext

This resolves issues with all the types and global symbols 
getting mangled names on successive compiles, to maintain 
unique IDs throughout the (previously shared, global) context.