(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
(#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.
Merge branch 'maint/facter-2/pin-compiled-gem-extensions' into facter-2
(fact-194) Add Facter.search_external{,_path}
Merge pull request #615 from kylog/issue/fact-194/external-facts-plugin-sync-support

Issue/fact 194/external facts plugin sync support
Merge pull request #614 from mckern/cherry-pick

Add initial support for building in a RHEL 7 mock
Merge pull request #509 from mzeren-vmw/fix/22060/undefined_path_in_macaddress

(fact-202) Fix undefined path in macaddress.rb
Merge pull request #612 from adrienthebo/feature/facter-2/fact-237-aggregate-resolutions

Feature/facter 2/fact 237 aggregate resolutions
(#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.

Backported onto facter-2 by Adrien Thebo <adrien@puppetlabs.com>

Conflicts:
	lib/facter/util/resolution.rb
	spec/unit/util/resolution_spec.rb
(doc) Update the Resolution#confine API docs

Without this patch, the API documentation for the
Facter::Util::Resolution#confine is a bit muddled and confusing.  This
confusion is caused by the different, overloaded, forms of arguments
that #confine accepts.

This patch addresses the problem by using the @overload YARD tag to
separate out each form, document the arguments for each form, and
provide a clear example for each form.

Back ported onto facter-2 by Adrien thebo <adrien@puppetlabs.com>

Conflicts:
	lib/facter/util/resolution.rb
Merge pull request #620 from adrienthebo/backport/facter-2/confine-blocks

Backport/facter 2/confine blocks