Currently, this will break things in unexpected ways if realloc gets used to increase the size of an allocation.

This should call malloc and copy the old p into the new region, at least at the moment while malloc is just incrementing a base address and returning it.

Obviously if malloc comes from core and calls something like sbrk() to get more memory, the malloc/free/realloc implementations here can go away, but in the meantime it's nice to keep surprises out of the way.