Deal with the missing dependencies for libuv.

Since libuv.pc is broken at the moment, try to determine libuv's
dependencies ourselves.  This ports most of the checks from libuv into
our CMake build, and fixes the build on other unix platforms.
Workaround the broken progress feedback in some versions of CMake.

Underneath the hood, CMake uses libcurl and libcurl has had a number of
issues regarding progress feedback.  In one sample run against Travis
CI, we ended up with nearly 3,000 lines of progress output for a single
download.

Unfortunately, CMake doesn't have the download and extract steps
separate, so we have some extra work that we have to do.  Much of the
content was taken from the ExternalProject.cmake and it's template for
generating the content of the download and extract CMake files.