Allow reconnect on connection loss with retry using ReconnectStatusListener

This is the combined solution we discussed via email.
```java
    public static enum DisconnectCause {
        /** Connection timed out */
        TIMEOUT,
        /** Connection closed by other side */
        CONNECTION_CLOSED
    }
```
Am I correct that CONNECTION_CLOSED is coming from the server.  When exactly would we expect to get this reason?  It seems to us that the client is expecting the server to be available, and if the server closes the connection we would want to wait retrying until the server becomes available again.  That is one of the specific cases where we do want to reconnect.