The normal Twisted waker will simply wake up the main loop, which causes
an iteration to run, which in turn causes ReactorBase.runUntilCurrent
to get invoked.

CFReactor
has a slightly different model of iteration, though: rather than have each
iteration process the thread queue, then timed calls, then file
descriptors, each callback is run as it is dispatched by the CFRunLoop
observer which triggered it.

So this waker needs to not only unblock the loop, but also make sure the
work gets done; so, it reschedules the invocation of
runUntilCurrent to be immediate (0 seconds from now) even if
there is no timed call work to do.