HEAD and redirect responses

The second patch addresses the main problem: if a HEAD request gets a redirection response, redirection handling tried to read a body that isn't there.

The first patch is more complex. It addresses the use of `make-input-port` and blocking operations in the read function, which should never block. I think the only real effect of the bug is to disable Ctl-C if communication stalls, though.