Refactoring: extract method _ensure_http_threadpool.
Don't unnecessarily invalidate readahead buffers.

Since the FS API is stateless (it receives the offset and length on
every request), it will end up performing lots of no-op seeks for
sequential access patterns (e.g. read 64k of data starting at 0, then
64k of data starting at 64k-- but on the second read, the cursor was
already at 64k). Since each of these requests could lead to its own
chain of read-ahead requests, we could end up downloading some or most
of the file more than once!

This change attempts to detect this pattern and avoid invalidating the
response and request iterators in that case.
Lower ramp factor to reduce contention when starting a new stream.
Issue read requests on the file that has the least data prefetched.
Only ramp up request size on every 4th request.