The `Clock` tracks looping calls to allow cancelling of all looping calls. However, this stopped them from getting garbage collected. This was introduced in https://github.com/element-hq/synapse/pull/18828 Fixes https://github.com/element-hq/synapse/issues/19392
This doesn't feel like a wheel we need to reinvent.
Due to a failure to instantiate DeferredTimedOutError, time_bound_deferred would throw a CancelledError when the deferred timed out, which was rather confusing.