Allow dynamic pool sizing.

Allows the number of requests allowed in a pool to vary over time by
retrieving the current pool size from a callback instead of a single
constant number.

This allows us to amend the number of requests ongoing according to our
needs, e.g. by responding to rate limiting information provided by an
upstream API.

Changes are

* Allow a callback to be passed in to specify the pool size instead of a
  constant pool size.
* As each request returns, add enough new requests to the queue to fill
  up to the current pool size limit.