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-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>
Merge pull request #2293 from Iristyle/maint/master/properly-return-backtraces

(maint) Puppet fails to properly surface backtraces
Merge branch 'ticket/master/PUP-1494/remove-native-ruby-encode-UTF-16-windows'

* ticket/master/PUP-1494/remove-native-ruby-encode-UTF-16-windows:
  PUP-1494 Guard against Win32 memory corruption
  PUP-1494 - Remove Windows iconv from colors.rb
(maint) Fix another broken rspec restriction
Merge pull request #2303 from kylog/maint/fix-rspec-key

(maint) Fix another broken rspec restriction
Revert "Merge branch 'pull-2137'"

This reverts commit a20b16bb70446d43c51340f72c821fc3a93c7cb6, reversing
changes made to 00579976264da4b2b8492bb664291b9ba0d5987c.

Unfortunately this change introduced a number of problems that need to
be addressed before this code can be released.

1) The yum provider is always holdable

The package type detects the ability to hold packages based on the
presence of the #hold method. Even though there is a guarding clause
around the `has_feature :holdable` in the provider it's bypassed when it
fails since the provider defines the #hold method.

This ties into:

2) Holding a package without the yum-plugin-versionlock raises errors

Since the plugin isn't available but the provider looks like it's
holdable, applying a resource like:

    package { 'bash':
      ensure => held,
    }

results in a backtrace since `yum versionlock` returns 1, and a
Puppet::ExecutionFailure is raised.

3) Held packages are not idempotent

When the yum versionlock plugin is installed, the resulting resource is
not idempotent because the ensure value is always being changed from
$version to 'held':

    [root@localhost puppet]# puppet resource package bash ensure=held
    Notice: /Package[bash]/ensure: ensure changed '4.1.2-15.el6_4' to 'held'
    package { 'bash':
      ensure => '4.1.2-15.el6_4',
    }
    [root@localhost puppet]# puppet resource package bash ensure=held
    Notice: /Package[bash]/ensure: ensure changed '4.1.2-15.el6_4' to 'held'
    package { 'bash':
      ensure => '4.1.2-15.el6_4',
    }
Merge branch 'master' of https://github.com/puppetlabs/puppet