Handle both exceptions possible while consuming a socket

This fixes #1939 and part of @zackw's rehaul of redirection.

To better test this, I'd like to add Betamax as a test dependency. Also, as a separate PR I plan to kill the usage of `RuntimeError` in `Response#content`. That's awful and the community consensus is that nothing should ever raise that.