New disconnect strategy.

Support asynchronous disconnects by breaking the socket only, which
should cause the thread using that socket to trigger clean-up.

(cherry picked from commit 9c302131491d05a4ca0209ef21770592c01f76fa)