Then can you expand your comment to say why we're duplicating this
functionality? e.g:

```
This handles polling for a server socket, which may have many connected
clients.

Ideally, we would use the classes from `zmq.eventloop.minitornado.ioloop`,
but unfortunately
these are unsuitable because of X.

```

I took a look at their code -- it looks like it tries to handle that case
by having a wakeup file descriptor, but if it doesn't work, I'm okay with
having our own.

```
    def add_callback(self, callback, *args, **kwargs):
        with self._callback_lock:
            if self._closing:
                raise RuntimeError("IOLoop is closing")
            list_empty = not self._callbacks
            self._callbacks.append(functools.partial(
                stack_context.wrap(callback), *args, **kwargs))
        if list_empty and thread.get_ident() != self._thread_ident:
            # If we're in the IOLoop's thread, we know it's not currently
            # polling.  If we're not, and we added the first callback to an
            # empty list, we may need to wake it up (it may wake up on its
            # own, but an occasional extra wake is harmless).  Waking
            # up a polling IOLoop is relatively expensive, so we try to
            # avoid it when we can.
            self._waker.wake()
```