Add cancel request to retry transport

@streadway Otherwise the wrapping http.Client can't make use of its timeout feature

see http://golang.org/src/pkg/net/http/client.go line 300
This is pretty fragile if all transports are expected to delegate down the `CancelRequest` interface to `http.Transport`.  I think this can be done with a different kind of transport that binds a `Canceller` with a `RoundTripper` in order not to have to thread this interface through the rest of the transports.