Only add -lgcc_eh when GCC is not emulated by LLVM
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.

This lowers the ramp factor (from 4 to 2) and also only ramps up the
size on every 4th request (instead of every request).
Issue read requests on the file that has the least data prefetched.
[PTFM-11351] Warn if built applet has no I/O spec
Unicode fixes for dx-build-app
Use appropriate mode when writing binary file
Add /project-xxxx/transfer route to API wrappers.
Consider CLI interactive only if both stdin and stdout are ttys
Fix wiki links in API wrappers
[PTFM-11907] Encode URLs using UTF-8 (see also RFC 3987)
Test for 2a01707
Changelog and version updates for v0.98.0
PTFM-11932 Add some diagnostics

* When PrioritizingThreadPool encounters an exception, print it (even
  though the consumer of the future may wish to suppress it).
* Add an assertion to ensure that _queue_lock is held when _next is
  called.
* More distinctive exception when reading 0th item from an empty queue.

(cherry picked from commit 0af65e22ca6fd067afee50c8d16e758c9fb5cfb7)
Changelog and version updates for v0.98.1
PTFM-11932 Require synchronized access when reading self._queues.

This prevents a race condition where the producer has put an empty deque
into _queues and not gotten around to putting anything in it yet, and
the consumer sees the empty deque (which is in contravention of the
invariant we've documented). These manifested as "IndexError: deque
index out of range".

It should also prevent a (never before observed) race condition where
the producer sees that the queue it wants to write to already exists,
but before it gets around to appending to it, the consumer pops its last
item and removes it, so that the producer crashes when it actually tries
to do the append.
Changelog and version updates for v0.98.2
PTFM-11932 Mostly revert added diagnostics

This reverts parts of commit 0af65e22ca6fd067afee50c8d16e758c9fb5cfb7,
keeping the assertions we added.
Changelog and dxR version update for v0.98.3