Auto reconnect

This series implements exponential back-off reconnect.  If the client is unable to connect due to a network error, it tries again after 3 seconds, then 6 seconds, then 12 seconds, and so on until a maximum limit is reached.

In order to implement this feature the early patches clean up the NJClient state machine.