Custom heap problem detected!

The size of pointers is incorrectly returned as `0` from free list
heaps, always. This causes failure in first fit heaps for obvious
reasons.

To fix this, I moved oved two new heap layers: add heap + size heap.
Using these, we should be able to store the size of allocations in the
allocation themselves by adjusting them slightly.