Emulate illumos interface cv_timedwait_hires()

Needed for Illumos #3582. This interface is supposed to support a
variable-resolution timeout with nanosecond granularity.  This
implementation rounds up to microsecond resolution, as
nanosecond-precision timing is rarely needed for real-world performance
tuning and may incur unnecessary busy-waiting.  usleep_range() is used
if available, otherwise udelay() or msleep() are used depending on the
length of the delay interval.

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