SERVER-8612 alternative select() implementation for Windows

On Windows, socket() can return any SOCKET value, not just a small, incrementing
number. This makes it very hard to use select() since you need to allocate an
enormous fd_set to cover all the possible SOCKET values.
Instead, I've rewritten the listen/accept logic on Windows to avoid calling
select(); instead, we make use of Winsock2 native API calls.