Emulate illumos interface cv_timedwait_hires()

Needed for Illumos #3852. This interface is supposed to support a
variable-resolution timeout with nanosecond granularity.  This
implementation just rounds up to jiffie resolution, as this was the most
expedient solution, and nanosecond resolution is rarely needed for
real-world performance tuning.  Add flags from sys/callo.h as these are
used to control the behavior of cv_timedwait_hires().  Specifically,

CALLOUT_FLAG_ABSOLUTE
    Normally, the expiration passed to the timeout API functions is
    an expiration interval. If this flag is specified, then it is
    interpreted as the expiration time itself.

CALLOUT_FLAG_ROUNDUP
    Roundup the expiration time to the next resolution boundary. If this
    flag is not specified, the expiration time is rounded down.

References:
    https://www.illumos.org/issues/3582
    illumos/illumos-gate@0689f76
Add kpreempt() compatibility macro

This is needed for the Illumos #4045 write throttle patch.  It is used
in the arc eviction code to avoid blocking all arc activity by sitting on
arcs_mtx too long.