mm: vm: range_alloc: Add alloc buffer

In the old situation, allocation of range descriptors was a potential
problem when the allocator ran out of memory because:

1) The VM descriptor requires the object allocator for range desriptors
2) When out of memory, the allocator requires a new VM range
3) The allocator could provide a descriptor for the required range.

In order to solve this, a buffer has now been created to stash some
range descriptors.

Each allocator is supposed to call the update function, in order to make
sure the range descriptors are topped up once the descriptors in buffer
dip below the maximum allowed.

This should make it possible to always have a range descriptor
available, up until the point where memory truly runs out.

Signed-off-by: Bart Kuivenhoven <bemkuivenhoven@gmail.com>
mm: vm: range_alloc: Hook up range_alloc

Now that this system has been implemented, it is time to hook up the
range descriptor allocator up to the range allocator itself.

Signed-off-by: Bart Kuivenhoven <bemkuivenhoven@gmail.com>
mm: vm: Add loop detect and fix loop in vm_range

Signed-off-by: Bart Kuivenhoven <bemkuivenhoven@gmail.com>
Merge branch 'vm_alloc_bug' into testing

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

Conflicts:
	dep.flags
	src/mm/slab/slab_alloc.c