Add simple reconnect logic to AbstractConnection and AbstractIO

I separated out the connect logic into its own private method, and added a reconnect method. I ran through several scenarios with it while testing, including load balancer connection closing. I would love to see some sort of reconnect logic make it into this library!