Migrate ServerWorkQueue into ReadOnly thread.

* WorkQueue only exposes 'take next' for the ServerEngine
* WorkQueue synchronizes/blocks on all work-queue related changes.
* WorkQueue notifies immediately upon mutation of state.
* Fix cancellation tests to reflect more sane ordering of events
* Remove ugly features from previous attempt.