Implement kpreempt()

This is required by "25068 arc_evict_ghost() should not hold arcs_mtx
for a long time" from Delphix OS.

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

sgbufs are scatter-gather buffers that consist of pages that can
be manipulated directly or mapped itno the page tables on an as-needed
basis. This a new data structure that will be proposed for inclusion
into Illumos. Their main purpose is a replacement for slab allocation in
ZIO buffers.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Replace current_kernel_time() with getnstimeofday()

current_kernel_time() has been observed to cause ZFS timestamps to be
truncated at seconds. This precision is unacceptable for certain tasks,
so we switch to getnstimeofday(). This was suggested on stackoverflow to
someone who had a similar problem:

http://stackoverflow.com/questions/4627440/how-reliable-is-current-kernel-time

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