improve patience for slow Hub in client tests

adds a first step in `_wait_for_idle`,
where it waits for all tasks to arrive before waiting for
no tasks to be running.  On a super slow machine,
it was possible for `_wait_for_idle` to return prematurely,
before tasks had even started.

ought to close #2807
Merge pull request #2808 from minrk/parallel_wait

improve patience for slow Hub in client tests

adds a first step in `_wait_for_idle`, where it waits for all tasks to arrive before waiting for no tasks to be running.  On a super slow machine, it was possible for `_wait_for_idle` to return prematurely, before tasks had even started.

closes #2807