Cleanup Memory Allocation Routines

This refactors the SPL kmem_cache_* functions to be slightly more efficient and provide better emulation of Solaris internals. The major improvement is that constructors and destructors are now called on demand as in Solaris instead of once when slabs are created and destroyed. This resolves an issue in ZFS where unused objects were contributing to memory pressure in ARC, which was clearly the wrong layer.