- Exit with failure if proxy starts to listen. Previously, we got stuck
inside ProxyRunner.start(), and since we weren't waiting on any IO
we'd exit 0! (The existence of a yielded fiber is not sufficient to
block Node exit.)
- Don't print various bits of startup text if we are stopped midway.
- Stop main Runner immediately if proxy or mongo runners invoke
onFailure, rather than waiting for wait to be called and return.
- Ensure that a few Futures don't get return called on them multiple
times.
- Ensure we don't try to call close() on the proxy's TCP server if it
failed to listen in the first place.