Constructs a block allocator given a hunk of memory, or a desired capacity
in bytes.
If ParentAllocator is NullAllocator, only the constructor
taking data is defined and the user is responsible for freeing data if desired.
Otherwise, both constructors are defined. The data-based
constructor assumes memory has been allocated with the parent allocator.
The capacity-based constructor uses ParentAllocator to allocate
an appropriate contiguous hunk of memory. Regardless of the constructor
used, the destructor releases the memory by using ParentAllocator.deallocate.
Constructs a block allocator given a hunk of memory, or a desired capacity in bytes.