keep timeout intact across redirects

Calling clearTimeout() on redirects removes any timeout set and prevents a timeout from being set again inside end(), which means that redirects may never succeed or fail on bad-enough connections. This PR fixes that and adds a test for timeouts w/redirects.