(#19761) Added virtual and is_virtual fact on Windows

Without this patch, the virtual and is_virtual fact is not set
on Windows computers. This patch fixes the problem, giving an
initial coverage for some hypervisors.

The solution proposed is based on the manufacturer and model
properties from WMI object Win32_ComputerSystem. This first version
is able to detect the following systems: HyperV, VirtualBox, Vmware
and KVM.
Merge branch 'luisfdez-feature/virtual_fact_windows' into 1.7.x

* luisfdez-feature/virtual_fact_windows:
  (#19761) Added virtual and is_virtual fact on Windows

closes #409
(#19845) Allow a block to be supplied as a confine

Allows a confine to take only a block parameter like:

confine { File.exist? '/bin/foo' }

Or take a fact name and a block:

confine :ipaddress do |addr|
  require 'ipaddr'
  IPAddr.new('192.168.0.0/16').include? addr
end

This is similar to what Puppet allows in provider confines.