If the code that `tap`s the Supply then does a `send` on the Channel,
then that will happen synchronously with the loop pulling from the
Channel. The result is that the loop never ends. However, to avoid
races in other situations, we subscribe to the async notifications of
new items in the Channel before starting that loop. Since we cannot
process any `whenever` events until setup logic is complete, this will
cause those events to queue up, causing memory growth.
This helps with #2803.