Allow reconnect on connection loss with retry using ReconnectStatusListener

This is the combined solution we discussed via email.
I added a commit that unregisters the ReconnectStatusListener from the m_distributor before calling m_distrubutor.shutdown().  I couldn't see a way to add a test for this change without refactoring, and adding mocking.  I did verify that a client can't be reused after the close() method being executed.  If that ever changed we would want to reregister the listener.