Schedule jobs to run at a time in the future.

The underlying implementation uses a heap of events, one for each job that needs to run in the future. The Async scheduler is responsible for waking up at the right time to run the jobs.

`module Deferred = Async_kernel__.Deferred1`
`module type Clock : sig ... end`
`module type Clock_deprecated : sig ... end`

`Clock_deprecated` is used in `Require_explicit_time_source` to create a clock module in which all functions are deprecated.