(#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-1494 - Remove Windows iconv from colors.rb

  - We no longer support / ship Ruby 1.8 on Windows, so iconv support
    is not necessary
(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-1505) Switch to using facter.search_external for setting search paths for external facts
Adds support for building puppet on RHEL7 via spec.
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.
(PUP-1278) Windows Puppet Agent Service gracefully terminates after succesfully being put into a Paused state

Removed redundant return statement
Added in logic to only start the Puppet Agent if the service is in a Running or Idle state
Merge branch 'pull-2137'
(PUP-1318) Make service squelch false
This will allow us to get failure output from commands...
(PUP-1318) Service now outputs full errorlog on fail
(PUP-1318) Fixing expected parameters in service provider specs now that service output is no longer squelched by default.
Redmine 565, a seven year old issue referenced in a comment in lib/puppet/provider/service/service.rb, is no longer applicable to `Puppet::Util::Execution#execute`.  It was squelching service output because of a bug in ruby where `#read` on a pipe never returned when the spawned process is SIGTERM'd by one of its children.  The current implementation of `Puppet::Util::Execution#execute` redirects to a temporary file instead of reading from a pipe.
We should no longer be squelching service output so that users can easily diagnose service failures.
(PUP-1485) Don't use master when we want compilation to fail

Previously, this test assumed that outside of a with_puppet_running_on
block, the puppet master would not be running. This is true in the
FOSS test environment, but when we test against PE there is always a
master running. By using a name that is guaranteed to not be a puppet
server, we can ensure the agent is always incapable of getting a
catalog.
Merge branch 'maint/stable/acceptance-dont-make-foss-assumptions' into stable

* maint/stable/acceptance-dont-make-foss-assumptions:
  (PUP-1485) Don't use master when we want compilation to fail
Merge branch 'stable'

* stable:
  (PUP-1485) Don't use master when we want compilation to fail
Merge pull request #2302 from peterhuene/fix/pup1318

(PUP-1318) Stop squelching service output so that it's easier to diagnose service failures.
Merge pull request #2295 from kylog/issue/external-facts-dir-api

(pup-1505) Switch to using facter.search_external for setting search pat...
PUP-1494 Guard against Win32 memory corruption

 - Ruby's .encode(UTF-16LE) call on String may generate a string that
   not properly terminated with 2 NULLs, which may result in garbage
   bytes read from the memory pointer passed into the Win32 API. This
   can cause memory instability which results in failures in later
   Win32 calls.  These calls have been replaced with an internal
   helper that properly NULl terminates the string.  Note that this
   bug is fixed in Ruby 2.1:
   http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?revision=41920&view=revision
 - Don't include the wide NULL character when calculating number of
   characters to write to the console to properly indent Puppets stdout
   output (without the -1 calculation, it's indented with two spaces).
 - Includes a test to ensure that we can detect when `string_encode` is
   updated in the future, when we move to a version of Ruby where the
   String#encode bug is fixed for encodings with multi-byte terminators

Paired-with Josh Cooper <josh@puppetlabs.com>
(maint) Don't duplicate hash keys in rspec tests

RSpec examples can be restricted by using `:if`: and `:unless` values in
the example metadata. However these are hash keys, and defining two
`:if` statements will cause the latter definition to overwrite the
first. This commit resolves this issue by defining a single expression
evaluated by `:if` instead of having two separate clauses.
Merge branch 'maint/windows/rspec-duplicate-key'
Merge pull request #2293 from Iristyle/maint/master/properly-return-backtraces

(maint) Puppet fails to properly surface backtraces