A Delay struct that encapsulates a Waiter.
An error happened while waiting.
A waiter trait, that can be used for executing a delay. Waiters need to be multi-threaded and cloneable. A waiter should not be reused twice.
Implement cloning for Waiter. This requires a temporary (unfortunately public) trait to allow an implementation of box clone on Waiter.