build: add OS= make switch

Overrides the platform detection heuristic. Useful for cross-compiling.
build: support out of tree builds

Invoking make with builddir_name=/path/to/dir builds libuv in the
designated directory.
linux: move files out of src/unix/linux

Flattens the source tree and simplifies the Makefile.
build: fix up dependency rules

* Auto-create build subdirectories.

* Add coarse dependencies on header files so make rebuilds the sources
  whenever the headers change.
win: sort error code mappings
win: add error mappings related to unsupported protocols
win: fix uv_winsock_init crash when no IPv4 stack present

uv_winsock_init() tries to create an IPv4 socket in order to detect
if the system has any layered service providers (LSPs) installed.
When creating this socket failed it would call uv_fatal_error and exit
with the following message:

  socket: (10047) An address incompatible with the requested protocol was used.

This patch fixes that. It also includes some minor style tweaks.
win/tcp: make uv_tcp_set_socket set UV_HANDLE_IPV6

This makes uv_tcp_set_socket responsible for setting the UV_HANDLE_IPV6
flag. This fixes a couple of situations where the the fact that a socket
is an IPv6 socket is not taken into account when deciding whether a call
to SetFileCompletionNotificationModes is appropriate.

It also fixes the issue that uv_tcp_open would never set this flag at
all.
win/udp: make uv_udp_set_socket set UV_HANDLE_IPV6

This patch makes uv_udp_set_socket responsible for setting the
UV_HANDLE_IPV6 flag. It also fixes the problem that uv_udp_open would
never set this flag at all.

In addition, this patch fixes some minor style issues.
win/udp: fix bug in getsockopt() return value check
win/udp: DRY up setting SO_REUSEADDR

This patch makes sure that only uv_udp_set_socket sets the SO_REUSEADDR
bit for UDP sockets.
win: get rid of early ipv6 support detection

No longer explictly check wheter an IPv6 stack is present when the user
tries to use IPV6 sockets. Instead realy on the operating system
to report the lack of protocol support via appropriate error messages.
Rust-specific: disable pieces of windows build that don't exist on mingw.