Improved connection pooling

Better handling of connection pool.  allows for multiple pools.  tests for failure cases such as single and multiple dead nodes.