Made test class abstract
1. Renamed SimplePool to ConcurrentPool
2. Removed need to subclass ConcurrentPool by adding a Factory that's passed in
the constructor
3. Pool throws an exception on timeout instead of returning null
4. Removed tracking of items that are checked out of the pool.  It's not the
responsibility of clients to ensure that what goes out is what goes in
5. Replaced ArrayList with ConcurrentLinkedDeque to track pool members
6. Because of 3/4, removed synchronized blocks in the pool
7. Added UsageTrackingConnection, which keeps track of open and last used times,
as well as the "generation" of the connection  Instances of this are what go
into the pool.
8. Added shouldDiscard method to DefaultConnectionProvider, which checks these
times against the current time, and returns true if the connection is stale
based on configurable timeouts in DefaultConnectionProviderSettings.
9. shouldDiscard also returns true if the connection's generation is older than
the current one.  This is useful as a way to clear the pool of stale connections
after, say, a server restart, without needing to lock the pool.
10.  ConcurrentPool is now LIFO instead of FIFO