Also call ReadTimeout on sockets that receive an EAGAIN

In the event the socket timeout is set to zero, and recv() is called on it, the
socket will raise a socket.error with the errno set to errno.EAGAIN. To us this
is a timeout because there's no time left for the read to complete.

This adds an extra exception handler which checks specifically for EAGAIN as
a socket error and raises it as a ReadTimeout if it is received.

Also adds tests that cover this case