Update MemoryRegion to current standards; add .Detach() method

Create state in the static initializer and pass that to
std::make_unique<> for the instance; requires the silly friend function
for std::make_unique<>