Pass down CallFrame into methods that might GC

This ensures that we always have the proper call_frame passed down, so
we never see an old call frame when doing a GC. This style also prevents
issues like this for the future.
Use mmap for allocation for young space

mprotect() according to POSIX is only defined on mmap'ed memory, so we
use that so the mprotect() guards have defined behavior.