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
Catch zero read timeouts in Python 3

See the inline comments for an explanation of what this change does.
Add link
use python 2.6-compatible set syntax
inline some exception raises

avoid allocating the memory for the obj
fix if spacing
Merge pull request #246 from kevinburke/eagain

Also call ReadTimeout on sockets that receive an EAGAIN