(#9546) Make pluginsync copy external facts to client

Pluginsync will now look in moduledir/facts/ for external facts and
copy them to the client under :pluginfactdest (default: $vardir/facts)
(#9546) Use $vardir/external_facts for storing external facts

Puppet loads local ruby facts from "$vardir/lib/facter#{File::PATH_SEPARATOR}$vardir/facts"
so we do not want to store our external facts in this directory.  I
could find no place where $vardir/facts is populated by plugin sync
or any other mechanism so this location must be for facts that do not
belong to a Puppet module and are installed locally on the destination
system.
(#9546) Load external fact directories into facter config
(#9546) Refactoring external fact source and dest to fact.d

The original implementation of this was going to use facts/ as the
source and destination directory.  It turns out the destination
directory facts/ is in use by some outdated code.  So the source and
dest will be switched to facts.d/ which also keeps the naming scheme
consistent with the existing external facts directory
/etc/facter/facts.d
(#9546) Add spec tests for external fact pluginsync
(#9546) Added external fact plugin sync support to plugin face
(#9546) Added feature detection support for external facts

External fact support in puppet core is dependent on facter commit
https://github.com/puppetlabs/facter/commit/6f19eeeef1c5c8e9cc84c44599e03a5c06a30abc
so we need to detect if the installed version of facter is capable
before executing the external fact code
(#9546) Removing PATH_SEPERATOR from pluginfactdest

This is not needed since only one direcrtory will be used for storing
and retrieving pluginsyncd external facts
(#9546) Retrieve module external fact dir from Puppet::Module

Instead of hard coding the external fact directory for modules and
globbing the directories, it would be accurate to have the
Puppet::Module type perform the lookup logic for external fact
directories.   The facts indirector just needs to make sure those
directories get added to the external fact lookup.
(#9546) Update facter specs to support request.environment.modules
(#9546) Fixed a few typos
Merge pull request #1998 from jjulien/feature9546

(#9546) Add external fact pluginsync