Connection pooling.
Various changes:

- `free` should entries shouldn't be just one (list in out thread), they
  should be (list (list in out thread)) to handle multiple open
  connections.

- Convinced myself that we I need to guard `free` with a semaphore,
  after all.

- Convinced myself that we timeout's don't need to hash-remove! the item
  from `free`, instead can just close the ports.

- When pulling ports off `free`, need to check if the ports are still
  open. Need to do this anyway, and it has the side benefit of
  enabling the previous change.

Having said all that: As of this commit there still appears to be a
problem when running with current-pool-timeout set to 0. I don't
understand this because the code path in that case *should* be
equivalent to the old, non-pooling behavior. From the behavior, it's
obviously not identical, but I can't (yet) see how.

The problem is specific to www.yahoo.com. The error is

    custom-port-pipe-read: input port is closed
Update tests and delete some commented code.
Yak shaving: `match`
Semaphores for `used` and `free`.

Go back to using a semaphore to guard `free`. Also add a semaphore to
guard `used`.

Although I'm not sure these are required for our own use of threads, I
think they might be in case the caller is using multiple threads. And
unless I have inadvertently created a deadlock opportunity, I don't
think there is a downside to having them.
Temporarily disable the yahoo.com tests.

They cause an error:

    custom-port-pipe-read: input port is closed

But I can't figure out why.
Split out anonymous function for legibility.
Add guard for hash-ref/hash-set! of `free`.
Fix interaction between content decoding and chunked transfer decoding.

This is the issue that was causing the unit test for yahoo.com to hang
with: "custom-port-pipe-read: input port is closed".
Yak shave: Change cond to match
Add request/redirect/uri. Deprecate request/redirect.

request/redirect isn't well designed. It can result in disconnect being
called twice on the same connection. It shouldn't take input and output
ports for a connection, because it may need to change the connection for
a redirect. Instead it should take a URI.

I would simply change it but I don't want to break anyone using it. So
instead I'm deprecating it, and adding a new `request/redirect/uri`
function.

Also, of course, rewrite call/input-request and call/output-request to
use request/redirect/uri.
Thread timeout disconnect only if still on `free` list.
Reorder tests.

By doing the 3 tests in a row for the same URI, sure to exercise
connection pooling even over a slow internet connection.
adjust concurrency and custodian handling

Goals:

 * Only reuse a connection when the creating and reusing contexts have
   the same custodian. Otherwise, a shutdown on the creating custodian
   closes the port for the reusing context.

 * Avoid locks in favor of a manager thread, to make concurrency handling
   kill-safe.

 * Add some weak links to avoid memory leaks in the case of
   custodian-based shutdowns.

 * Fix a subtle race condition between asking a timeout thread to exit
   (with an asynchronous request) and checking whether ports are still
   open.
Merge pull request #6 from mflatt/pool

adjust concurrency and custodian handling
Increase 100-continue timeout from 10 to 30 sec.