Done returns a channel that is closed after the next broadcast of
this Cond. Done must be called with the Cond's lock held; the lock
is released before Done returns.
Wait returns after the next call to Broadcast, or if the context
is complete. The context's lock must be held when calling Wait.
An error returns with the context's error if the context completes
while waiting.
Lock attempts to exclusively lock m. If the m is already locked, it will
wait until it is unlocked. If ctx is canceled before the lock can be taken,
Lock will not take the lock, and a non-nil error is returned.