A time source holds a time (possibly wall-clock time, possibly simulated time) and gives the ability to schedule Async jobs to run when that time advances.

There is a single wall-clock time source (returned by `wall_clock ()`) that the Async scheduler drives and uses for the `Clock_ns` module. One can also create a user-controlled time source via `create`, and advance its clock as desired. This is useful so that state machines can depend on a notion of time that is distinct from wall-clock time.

`module Deferred = Async_kernel__.Deferred1`
`module type Time_source : sig ... end`