Add reconnect method, break out connecting into separate method.

I reworked the reconnection logic to play nicely with the lazy connection that was just merged in.