Fix: Detected hang in memory allocator

When the slab allocator would run out of memory, it would request more
memory from the vm allocator. This in turn would require more memory
from the slab allocator.

This circulair dependency is not so much of an issue if the allocator
would move on to the next empty slab but it didn't.

Also there would be an issue of the slab allocator requiring another
slab to produce slab descriptors, which could also block up.

The slab descriptors are now part of the slab they describe and are
referenced at the start of the object. This might cause the slab to
contain a tiny bit fewer objects but it does fix the issue that came
with allocating more descriptors.

Signed-off-by: Bart Kuivenhoven <bemkuivenhoven@gmail.com>