An implementation of MemoryIO that throws exceptions on any attempt to read/write
the callback memory area (which is code).
This also keeps the callback alive via the handle member, as long as this
CallbackMemoryIO instance is contained in a valid Callback pointer.