(#20072) Redirect stderr to the correct null device on windows

Previously the virt_what method redirected stderr to /dev/null, which fails on
windows. This commit adds a case for windows where the stderr is redirected to
NUL, the windows null device. It also adds tests to ensure this behavior.
(#22072) Execute fully resolved virt-what

Previously, we were calling virt-what, which on windows, causes it to
think it might be a shell built-in, which it isn't. And that results in
the warning:

  Using Facter::Util::Resolution.exec with a shell built-in is deprecated
  Most built-ins can be replaced with native ruby commands. If you really
  have to run a built-in, pass "cmd /c your_builtin" as a command.

This commit changes the virt-what helper to first resolve virt-what into a
fully qualified path, which uses ENV['PATH']. On Unix, it also looks in
/sbin and /usr/sbin.
Maint: Colorize spec output on Windows

Previously, running bundle exec rspec spec on Windows output ANSI escape
sequences. This commit requires the win32console gem to colorize the
output.
Merge branch 'ticket/1.7.x/20072_fix_virt_what_redirection' into 1.7.x

* ticket/1.7.x/20072_fix_virt_what_redirection:
  Maint: Colorize spec output on Windows
  (#22072) Execute fully resolved virt-what
  (#20072) Redirect stderr to the correct null device on windows
(#14522) Don't read /proc/self/status on Solaris

/proc/self/status isn't a standard file on Solaris and can't be read as such.
Attempting to read it when using ruby 1.9.3 produces errors such as 'invalid
byte sequence in US-ASCII'. According to
http://www.ruby-forum.com/topic/163804, /proc/self/status is a sparse file with
a map at /proc/self/map to indicate which parts of the file to read. As a
stopgap measure, this commit simply returns false on Solaris, rather than
trying to read the file.
(#14522) Force encoding of data read from /proc/self/status

Without this patch the previous fix for this issue worked well, but was
actually testing and fixing a different problem than described in the
issue.  Reading the /proc/self/status file on Solaris works well,
however the file contents are very different from the Linux platform.
On linux the file contains US-ASCII encoded text which is fully
compatible with our default UTF-8 encoding.  On Solaris, however, the
file is raw data representing the memory space of the process.  This raw
data has no encoding, and as such, causes the invalid byte sequence when
compared with a regular expression.

This patch addresses the problem by forcing the encoding of the string
into UTF-8, removing any invalid characters.  The comparison is not a
problem on MRI versions which do not have `String#encode!`.
Merge branch 'haus-ticket/1.7.x/14522_dont_read_proc_on_solaris' into 1.7.x

* haus-ticket/1.7.x/14522_dont_read_proc_on_solaris:
  (#14522) Force encoding of data read from /proc/self/status
  (#14522) Don't read /proc/self/status on Solaris

closes #421
Merge branch '1.7.x'

* 1.7.x:
  (#14522) Force encoding of data read from /proc/self/status
  (#14522) Don't read /proc/self/status on Solaris
  Maint: Colorize spec output on Windows
  (#22072) Execute fully resolved virt-what
  (#20072) Redirect stderr to the correct null device on windows