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.