ConnectionPool improvements

1. Made ConnectionPool an abstract class that is extensible for
pools with different natures
2. Switched to using a Cache to hold the connections in the pool
so that there is automatic expiration
3. Deprecated static factory methods that don't specify the nature
of the connection pool being built
4. Made appropriate changes to unit tests