(#23316) Update yum package provider support :holdable

This commit adds support for the `holdable` package feature to the yum
package provider. If the yum versionlock plugin is available packages
can specify an ensure value of 'held' and the yum provider will use the
versionlock plugin to lock the version.

This feature has the caveat that it can only be enabled at provider load
time since provider features cannot be enabled based on a code block.
(PUP-1282) Express Windows specific gem dependencies

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

This commit adds the windows specific gems to project_data.yaml, and
updates the Gemfile to add these dependencies when during
bundle install

The build pipeline will automatically create an x86-mingw32 gem in
addition to the generic one.
PUP-1494 - Remove Windows iconv from colors.rb

  - We no longer support / ship Ruby 1.8 on Windows, so iconv support
    is not necessary
(maint) Fix major performance regression in Puppet specs

 - This one seemingly innocuous change resulted in an increase
   of spec run time from 20 minutes to 2 hours on Win2003R2 and
   a series of type conversion errors in specs on Win2008R2 that
   it has been theorized are a result of memory pressure exerted
   by the change.  This has also caused slowdowns across the
   boards in other specs, and more diagnostic work is being
   performed to determine the root cause.
 - For now, this change is being merged as it clears out a number
   of CI issues that we're experiencing.
Merge branch 'maint/master/environment-performance-regression'

* maint/master/environment-performance-regression:
  (maint) Fix major performance regression in Puppet specs
(PUP-1282) Allow patch version float on windows dependencies

This loosens the version dependency of the windows specific gems a bit
to allow for floating on the patch part of the version number. This
allows better compatibility as future updates are made to dependency
versions.
Merge pull request #2283 from ferventcoder/issue/master/PUP1282-windows_gem_dependencies

(PUP-1282) Express Windows specific gem dependencies
(PUP-1484) Fix serialization of TagSet

The TagSet class didn't include FormatSupport and didn't have a
to_data_hash method, so it couldn't be serialized to msgpack.
(PUP-1118) Add check for getting multiple environments

The acceptance test now checks for getting multiple environments listed
from the environmentsdir
(PUP-1118) List environments from a directory

This starts the process of creating a Puppet::Environments::Directory
that will find environments from a particular directory. The directory
has sub-directories, where each sub-directory name is the environment
name.
(PUP-1118) Load full environments from a directory

This changes the loader used by the code to list environments to be a
composition of the legacy environments and the new directory
environments.
(PUP-1118) Simplify Puppet::Context

Puppet::Context can reduce the number of objects that it uses for
tracking contexts by keeping everything internal to it. This actually
results in much less code, but a few more instance variables to track.
Overall is seems like an easier to understand system.
(PUP-1118) Create a new context after app initialization

There end up being 3 steps of initialization in puppet:
  * bootstrap: after code starts loading, but before initialize_settings
    is called
  * initial: after initialize_settings is called, but before an
    application has been loaded and sets up the true run mode
  * application: after an application has started running, set the run
    mode, and reinitialized the app default settings.

This last one had been missed in previous changes to have puppet setup
the right contexts. This now setups another context override in the
Puppet::Application run method to control the application context.
(PUP-1118) Make environments readable by puppet master

The directories that were made for the environment listing tests were
not actually readable by the master. This changes them to be readable.
Add initial support for building in a RHEL 7 mock

Building in an x86_64 mock, since RHEL has not provided a 32-bit release.
Merge branch 'pull-2287'

This closes GH-2287
(maint) Puppet fails to properly surface backtraces

 - In many cases, exceptions are handled with Ruby and rethrown in
   a manner that loses the original exceptions backtrace. This often
   masks the real backtrace associated with an error, and can be the
   source of misleading errors or fishing expeditions.
 - Where appropriate, pass along the backtrace, or use the initializer
   of the raised Error to wrap / extract the backtrace from the existing
   exception.
 - Puppet::Util::Windows::Error is given a new initializer that allows
   passing in the original Exception
 - Puppet::Util::Errors.fail adds a new overload that allows for the
   original Exception to be passed in
 - To summarize, calls structured like this preserve backtraces:
   rescue ArgumentError => e
     raise
     raise e, e.message, e.backtrace
     raise e
   rescue
     raise
     raise $!
     raise $!, "bad arg yo -- part 2", $!.backtrace
     raise $!, $!.message, $!.backtrace
     raise Puppet::Error.new("new msg / ex type", detail)
 - To summarize, calls structured like this will eat backtraces:
   rescue
     raise $!, "Just smoked the backtrace on existing exception"
     raise "Just smoked the backtrace and changed to RuntimeError"
     raise RuntimeError.new($!)
(PUP-1118) Document Puppet::Environments

This also creates two new rake tasks for generating the documentation:
doc:api and doc:all. The doc:api is to generate the published docs,
which omits portions of the code that hasn't been tagged. doc:all just
outputs everything.
(pup-1505) Switch to using facter.search_external for setting search paths for external facts
Merge pull request #2292 from mckern/add-el7-for-mocks

Add initial support for building in a RHEL 7 mock