This is a delay-based debouncer, where given a minimum delay and an action to issue, we'll build a stateful component that will eventually issue the action once, after being given a slew of requests within the delay timeframe.
The initial debouncer
To bounce the debouncer, just make multiple calls to Bounce.
The main logic of the debouncer.
Representing either more messages needing to be handled in this component, or the message you've been trying to debounce.
By being able to convert a DebouncerMsg to a message we understand, we
can turn a whole DebouncerResults to a message we understand.
The state of the debouncer