MemoryMapper class takes care of cross-process and in-process address space
reservation, mapping, transferring content and applying protections.
Implementations of this class can support different ways to do this such
as using shared memory, transferring memory contents over EPC or just
mapping memory in the same process (InProcessMemoryMapper).
Mapping shouldn't be associated with a local address: It just represents the reserved range in the executor.
I don't think we need a separate type for this -- An ExecutorAddrRange should be ideal.