[Perf inspired by#71] don’t attempt to flush empty queue, merely skip to...

... the next queue


* don’t both allocating a new intermediate queue if it is empty
* don’t bother trying to invoke all the callbacks for a clearly empty queue
* don’t both trying to flush the empty queue
* don’t bother trying to see if the empty queue scheduled something on a previous queue

instead

- check if we need to flush the current queue
  -  if it needs to be flushed: flush, then return to the first queue and try again
  - if not, try the next queue

@krisselden r?
related: #71