New disconnect strategy.

Support asynchronous disconnects by breaking the socket only, which
should cause the thread using that socket to trigger clean-up.
Merge pull request #674 from square/jwilson_0403_new_disconnect_strategy

New disconnect strategy.