Support MCJIT

This adds MCJIT support (only enabled on 3.4+ though due missing functionality and patches in 3.3). MCJIT is ifdef'ed out for 3.3, so we can merge this soon, so we don't have to keep maintaining a branch that touches so many different locations. For 3.4 with MCJIT, I'm still seeing random failures when running the tests, though sequentially everything is fine. This might well be an MCJIT bug, we'll see.

I ended up going with the shadow module approach during imaging (i.e. everything gets emitted into a giant module and we pull out the functions we're actually running). 

Closes #3922 
Closes #4418