type Alarm struct {
Send chan<- Event Receive <-chan Event}
Alarm resends events at the requested time, or later.
Events are always received in the order they've been sent.
Closing the Send channel asks the alarm to terminate, which is notified by closing Receive.