Create custom memory manager for JIT'ed code
Rework JIT to use a Context per JIT request

Due to how LLVM is setup, we need to use an LLVMContext per jitted
method if we don't want to leak any memory during the runtime of the
process.

This uses the new JIT memory manager so we can cleanup the generated
native code outside the LLVM managed process and thus we don't leak any
of the LLVM structures and keep memory usage in Rubinius stable.