(FACT-186) Express windows specific gem dependencies

Previously, if a ruby module on windows tried to use facter as a
library, the calling module had to know about facter's platform specific
dependencies. This comes up when trying to develop and test puppet
modules on windows.

This commit adds the windows specific gems (which mirror the Gemfile) to
project_data.yaml. The build pipeline will automatically create an
x86-mingw32 gem in addition to the generic one.
(FACT-186) Consolidate gem runtime dependencies

Previously, the Gemfile and ext/project_data.yaml both described gem runtime
dependencies, the former requiring an exact match, the latter a pessimistic
match.

This commit makes project_data.yaml be the single source of truth, and it
specifies exact versions.

Rubygems and bundler have different ideas about what constitutes a platform.
Rubygems requires an arch and os, e.g. x86-mingw32, while bundler has a
hard-coded list, see Bundler::Dependency::PLATFORM_MAP. As result, we need
to use the rubygems platform when building the facter gem, but use the
bundler platform when expressing gem dependencies.
(FACT-186) Pessimistic version binding gem dependencies

This loosens the Win32 platform gems and CFPropertyList to allow the
third version number (patch)  to be determined at install time.

This allows better compatibility as we make future updates to
dependency versions.

Paired with Josh Cooper <josh@puppetlabs.com>
Merge pull request #607 from ferventcoder/issue/facter2/fact186-win32-dependencies

(FACT-186) Express windows specific gem dependencies
(FACT-65) Extract Resolvable and Suitable mixins

The Facter::Util::Resolution class contained behavior for determining if
a resolution was suitable, the precedence of the resolution, code for
safely resolving values, and code for actually resolving information.
This commit breaks up the Resolution class into a Suitable mixin for
determining if a resolution can run and the precedence of that
resolution, and a Resolvable mixin for handling behavior around the
resolution of a given fact.
(maint) Remove normalization tests from resolvable
(FACT-237) Add directed graph for handling dependencies
(FACT-237) Add aggregate resolution class
(FACT-237) Implement deep_merge for composing facts
(FACT-237) Implement deep_freeze for composed facts
(FACT-237) Use specific error classes for deep_merge and deep_freeze
(FACT-237) Freeze results of each aggregate chunk
(FACT-237) Define default aggregate action
(RE-814) Add initial support for building in a RHEL 7 mock

RHEL7 support is being added for x86_64 only; we'll fix/expand
this if upstream releases a 32-bit version of RHEL7.
Merge pull request #613 from mckern/add-el7-for-mocks

(RE-814) Add initial support for building in a RHEL 7 mock
Merge pull request #611 from adrienthebo/feature/facter-2/fact-238-extract-resolution-mixins

Feature/facter 2/fact 238 extract resolution mixins
(#22636) Allow list of external fact directories to be appended to

Currently, the only way to override the external facts directories is to write your own Facter::Util::FactLoader and replace the existing loader with this.  This commit allows you to simply set or append to the already existing ext_facts_dirs variable which makes it much more extensible for use by other programs like puppet.
(#9546) Do not execute com, cmd, exe, or bat files if not on windows

Facter currently only executes com, exe, and bat files if on a windows
system.  It should also exclude these on unix flavored systems since
the interpreter for these "cmd.exe" will not be present.

This also supports the use of pluginsync for external facts where in a
hybrid environment external facts for windows may end up getting syncd
to a unix system.

Conflicts:
	spec/unit/util/parser_spec.rb
(RE-814) Add initial support for building in a RHEL 7 mock

RHEL7 support is being added for x86_64 only; we'll fix/expand
this if upstream releases a 32-bit version of RHEL7.
(maint) Pin windows compiled gem versions

Since the windows spec boxes may not have dev tools installed, they may
not be able to install newer versions of the windows API gems. This
commit ensures that we won't have to worry about an unexpected version
of one of those gems failing to install.