Fix block allocator free-past-block.
Fix block allocator free-past-block.

The block allocator checked if there was enough room for num_bytes
(allocation size), while on free the allocator marks memory of the span
of the full element size, leading to a write past the end of the block
if the last element was smaller than the full size. Since each block
begins with a pointer to the allocator that owns it, this leads to a
dereference of 0xcd-repeating on any following free from the next block.

Srekel/the-debuginator,Srekel/the-debuginator