First attempt at implementing timeouts.

At this point the error back is called with a timeout exception and the
deferred is removed from the _request set.

But there is a problem!! It seems like the underlying socket still
attempts to transfer the data, and if a deferred is canceled and the
replying endpoint starts replying then a keyError is throw, due to
the attempt of removing the already removed request.

One could ignore that by catching and handeling that exception
appropriately, But that seems like symptom treatment of the real
problem, being that the socket.recv call is not canceled.

Please advise?