Move connection pooling logic.

Previously we had this ugly, awkward release() method that
attempted to manage connection pooling, discarding streams
for caching, and closing broken streams.

Move connection reuse to HttpConnection, with policy informed
by HttpEngine. It specifies what to do when the connection
becomes idle: pool, close or hold. The connection does what
it's told.
Merge pull request #533 from square/jwilson_0215_rethink_recycle

Move connection pooling logic.