(RE-1040) Add OS module to detect windows platform

This commit adds a Pkg::Util::OS module and windows? method. It
also provides a DEVNULL device that maps to the appropriate value for
windows and everything else.
(RE-1040) Use PATHEXT to resolve executables

Tools like git on windows are actually named 'git.exe', so we need to
take into account path extensions when resolving them.

This commit uses the PATHEXT environment variable, which is standard on
Windows, but if it is absent for some strange reason, it defaults to a
reasonable set of extensions.
(RE-1040) Use the platform specific DEVNULL device

Use the platform specific DEVNULL device, otherwise, trying to redirect
commands to /dev/null on Windows results in "The system cannot find the
path specified."
(maint) Colorize rspec output on windows

The win32console gem is needed to colorize rspec output when running on
windows and ruby versions prior to 2.0.
(RE-1040) Use ruby's mktempdir

Previously, we were shelling out to mktemp to create a secure temporary directory. This isn't necessary as Ruby already provides this functionality.

This commit changes it to use `Dir.mktmpdir` and adds tests.

Note Windows does not use world writable temporary directories. Instead
temporary directories are created relative to the user's home directory, and
are already secure.