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.