Utility struct to register and wake a waker.
If a waker is registered, registering another waker will replace the previous one without waking it.
Intended to wake a task from an interrupt. Therefore, it is generally not expected,
that multiple tasks register try to register a waker simultaneously.