Replace startBlocking/isInIoThread/dispatch with BlockingHandler

No longer calling endExchange as it seems to take care of itself.

The dispatch (now invoked by the BlockingHandler) is expensive. We're
trading a some performance for availability because not dispatching
runs the risk of starving clients when handlers take too long.