Object pooling API.

The `org.apache.tomcat.dbcp.pool2` package defines a simple interface for a pool of object instances, and a handful of base classes that may be useful when creating pool implementations.

The `pool` package itself doesn't define a specific object pooling implementation, but rather a contract that implementations may support in order to be fully interchangeable.

The `pool` package separates the way in which instances are pooled from the way in which they are created, resulting in a pair of interfaces:

{@link org.apache.tomcat.dbcp.pool2.ObjectPool ObjectPool}
  defines a simple object pooling interface, with methods for borrowing instances from and returning them to the pool.
{@link org.apache.tomcat.dbcp.pool2.PooledObjectFactory PooledObjectFactory}
  defines lifecycle methods for object instances contained within a pool. By associating a factory with a pool, the pool can create new object instances as needed.

The `pool` package also provides a keyed pool interface, which pools instances of multiple types, accessed according to an arbitrary key. See {@link org.apache.tomcat.dbcp.pool2.KeyedObjectPool KeyedObjectPool} and {@link org.apache.tomcat.dbcp.pool2.KeyedPooledObjectFactory KeyedPooledObjectFactory}.