Differentiate between failedWithCause & failedWhileProcessingContent

* Renames failedWithCause(Throwable, HttpResponse) to failedWhileProcessingContent(Throwable, HttpResponse). This variant is only called if an exception is raised while processing content and thus doesn't need to perform any cleanup on the connection itself.

* failedWithCause now includes code to terminate the connection if it is still marked as available when this even happens.

* Updated specs to match this change
Make a connection die when a write request fails

When a write request fails, the channel has become unusable so it doesn't make sense to hope we can still write to it.
Add test to ensure failures keep the request queue flowing

* If a request times out, the following request to the same host will be picked up and executed.
* If a connection to a host fails, all queued requests will fail along with it.
Merge pull request #6 from brunodecarvalho/cleanup-connection-on-timeout

Cleanup connection on timeout

Fixes #5