Modify retry handling in Socket::read

- Retry the read 10* times if the initial read sets errno to either
EAGAIN or EINTR (WSATRY_AGAIN or WSAEINTR on Windows)
- Throw an exception if n is 0 or less than 0 and errno is different or
all retries have happened
- Return 0 instead of throwing an exception, if appropriate
- Update the Windows version as well