Add limit to Reconnects

Previously reconnects were done endlessly and the reconnect logic was applied before ever establishing a connection the first time.

This changes it to make the reconnect settings configurable with defaults matching the previous behavior and makes the reconnect logic not kick in until there has at least been one connection successfully.

Additionally, it resolves the case where the connection was closed when we go to write to it on a `PUT` and immediately triggers the reconnect logic.

Items that are failed due to the ending retry are preserved and if unable to recover are given a new `ConnectionDropped` exception.