#vbmc - Use a pool of http clients to service concurrent requests

`CurlHttpClient` is [not thread safe](https://source.corp.google.com/piper///depot/google3/third_party/ecclesia/lib/http/curl_client.h;rcl=677857727;cl=713100915;l=188), so we should not send concurrent requests on the same client. In order to allow concurrent requests in vBMC, this is implemented by creating a pool of clients. Each request will first allocate a client from the pool, then complete the request, and finally return the client to the pool.

Since most requests are _not_ concurrent, the pool is implemented as a stack so that requests preferentially use the same client repeatedly. This lets us make better use of curl's connection pool.

PiperOrigin-RevId: 715464667
Change-Id: I34c0a0f0e888a26548bda7b748fe6bf54d023f82
6 files changed