Use Linux SLAB allocator for spl_kmem_alloc_t objects

The Linux kernel's virtual memory subsystem has a single global lock.
Contention for this lock suffers from fairness issues where allocations
that depend on it could be starved for an indefinite period of time.
The SPL SLAB allocator is implemented on top of the Linux kernel's
virtual memory allocator. It attempts to mitigate such problems by doing
allocations in bulk.  However, other things will use the same interfaces
for virtual memory allocations, which can be a source of contention.

When an attempt at an allocation is done and a cache is full, the SPL
SLAB allocator will allocate a temporary spl_kmem_alloc_t object before
doing any actual allocations. This increases contention on the global
lock and slows down allocations. This also adds a potential source of
internal fragmentation in the virtual memory address space immediately
prior to an allocation, which is problematic on 32-bit systems.

We switch to the kernel's physical memory slab allocator. The objects
themselves have the property that they are small and are used
infrequently, which should permit the kernel's slab allocator to satisfy
all allocations from a single page. This provides us with O(1)
allocations, reduces contention and also eliminates a source of internal
fragmentation of the virtual memory address space.

Signed-off-by: Richard Yao <ryao@gentoo.org>