Flesh out API for HighPrecisionClocks

Now a general interface for `Clock`s that provide a nanosecond component
to their time.

Also adds `HighPrecisionAsyncClock` to add nanosecond precision to
`AsyncClock`; though the nanosecond component is not calculated
asynchronously.