Includes splitting off core functionality to a base MemoryPool class that can be re-used later if necessary.