pool context manager, http pool AssertionError fix

- Introduce a generic PooledObject class to act both
  as a context manager for getting and putting back
  an object from a pool.

- Implement a class PooledHTTPConnection(PooledObject)
  as a sublcass of the one in (1)

- Eliminate httplib.HTTPConnection patching of close().
  Eliminate put/get_http_connection.
  The httplib.HTTPConnection object is no longer released
  back to the pool via a method on it.
  One must explicitly put it to the pool,
  or use the PooledObject context manager in (2) above.

- Update tests