Add Timer module
Use Timer module for timeouts

There is one point that requires further thinking: underlying the
[Timer.wait_any] function is a call to [Lwt_condition.wait] and when
timers go off, they call [Lwt_condition.broadcast]. Right now when
[Timer.wait_any] returns, we call [tick] to do any required timeout
processing. Since [tick] can block it is possible that another timer
will go out while [tick] is blocking and *that* timeout will be
lost (because no-one is listening to [Timer.wait_any]).
Fix issue of lost timeouts (see prev commit)

We use a version of [Lwt_mvar.t] which discards any new contents if it
is full (so that [put] does not block).

For details, see the implementation of module [Tvar].
Fix `Timer.expired'

If a timer is cancelled it should not be considered `expired'.