Fixing Single server manager so that failure does not cause a reconnect spin-loop

- Changed SingleServerManager to fail and stay failed until ServerPoll interval retries, or a new server is added
- Moved old SingleServerManager implementation to InfallibleSingleServerManager
- Added a callback to ServerManagerFactory so that customer ServerManagers can be returned other than the default SingleServerManager and RoundRobinServerManager