Pool management for individual clients

In Firefox, Deferred objects are pushed onto the call stack
recursively. This becomes a problem when uploading large files, as
canceling that upload will cause the next part to be resolved, and in
that resolution recursively call the next part, etc., resulting in
overflowing the call stack and causing a “too much recursion” error.
This commit allows all requests for a certain client to be rejected
without recursively calling each pending request.