Fix memory leak and keep-alive handling in HTTPClient.

The hash map that was used to store connection pools never found an existing key, so each HTTP request created a new connection pool. A fixed size ring buffer is now used to store connection pools.