(PUP-1362) (PUP-1775) Use yum check-updates for latest yum packages

Early versions of the yum package provider used `yum list available` to
determine the latest version of packages that were `ensure => latest`.
However the versions of yum available around that time changed the
output formatting of yum, which meant that the parsing code would break
on a regular basis (#836).

Commit 8722e439 resolved this by using the yum python bindings to
interact with yum. This required shipping a python helper script to
provide the interface between Puppet and the python libraries. However
this opened up a host of other issues ranging from what version of
Python is symlinked to '/usr/bin/python', how the yum database is
locked, and so on (PUP-1362, #11380, #16623). In addition changes to
yumhelper.py were very hard to test or reason about since it doesn't
neatly plug into our existing tests.

This commit removes yumhelper.py and replaces the update checks by
calling `yum check-update`. The output format of this command has not
changed since CentOS 4 and works all the way up to RedHat 7 so we should
be able to rely on this for a while.
(docs) Note that the path setting only works in main section of puppet.conf

See PUP-3023 for more info.
(maint) Remove GC bug workaround for Ruby < 1.8.7

Commit bd5dc649 added a workaround for a Ruby GC bug that was present in
1.8.5, 1.8.6, and partially fixed but still residual in 1.8.7. Since
we're dropping Ruby 1.8 support entirely we can now remove the
workarounds.
(PUP-1106) Unschedule refreshes on skipped resources

If a given resource is being skipped (e.g. has failed dependencies, is
unscheduled, untagged, etc) that resource should not trigger any
additional behavior. However a resource could be skipped and still have
events trigger behavior. This commit changes the event processing logic
to only process events for resources that should be applied and dequeues
events on resources that should not be applied.
(maint) Use correct data type when unscheduling events

Commit 9d59f204 added the ability to dequeue events on a given resource,
but it did so by setting the value of the target callbacks to an empty
hash. However the value of target callbacks is an array, so if events
were re-queued for a given resource we would get an error like so:

    {}.concat(%w{one two three})
    NoMethodError: undefined method `concat' for {}:Hash

Currently we can't requeue events after dequeuing events, but if this
changes then this code is very incorrect.

This commit fixes the event reset to behave as expected.
(PUP-3322) Add debugging to appdmg provider

I was trying to install Scratch[1] using boxen[2]. The appdmg isn’t in
the expected format, so this failed. I had to poke around a bit to
understand why that was happening. This change captures that knowledge.

[1] http://scratch.mit.edu/scratch_1.4/
[2] https://boxen.github.com/
(maint) Correct Certificate Factory documentation

The existing certificate factory documentation incorrectly indicated
that it was responsible for actually signing certificates, which it is
not. In addition it specified a parameter as a raw
OpenSSL::X509::Request which it is actually the wrapped
Puppet::SSL::CertificateRequest.
(PUP-3433) Don't store autoload instances

Autoloader instances were being stored in the Autoload class instance,
but no code actually used the stored values. We can remove all of that
logic.
(PUP-3433) Remove method proxying methods

Why write a 3 line method when you can write a 12 line metaprogramming
method?
(PUP-3433) Remove invocations of Autoload with explicit wrap

In Kernel.load, the wrap argument defaults to false and it was never
possible to set it to true.
(PUP-3433) Tear out dead wrap code

In the class instance `@wrap` could never be true, and in instances
`@wrap` was never used.
(PUP-3201) Treat :undef as PNilType

For PUP-2857 :undef was changed from being a PNilType to a PRuntimeType.
This stopped the undef literal in the language from being able to be
assigned to Optional parameters. However, this only happened when the
undef was the default expression for the parameter.
Merge pull request #3194 from zaphod42/issue/stable/pup-3201-undef-not-working

(PUP-3201) Treat :undef as PNilType
(PUP-3244) Fixup test for windows and future parser

The test failed on windows nodes because the acceptance test wasn't
using the `puppet` method from beaker. The test failed on future parser
due to the bare file mode, in 4.0 only string modes will be allowed.

This commit fixes up those issues, and removes the
`acceptable_exit_codes => [0]` since that is the default behavior.
(PUP-3401) Fix type calculations of "all Patterns"

The type calculator did not correctly compute assignability for
a non parameterized Pattern. Such a Pattern is equal to "any string",
and is thus assignable from any other Pattern, Enum or String.

This was missing in the calculator and this resulted in Pattern neither
being equal to, less than, or greater than parameterized patterns.
(PUP-3302) Fix resource when using directory environments

Before this fix when `puppet resource file` was being used set with
source defined puppet would error out because we need an environment
object in Puppet::Indirector::Request#environment= and instead of the
none environment being passed around it is passed as the string "none"
which is a directory environment that does not exist. This is what is
raising the EnvironmentNotFound error in puppet.

Instead of passing around a string we pass around the none environment
to fix the issue.
(PUP-3357) generate implicit names for ssh_authorized_keys if needed

Generated resources from the user type share an empty resource name
if more than one unmanaged key has no comment in the authorized_keys
file (the comment is used for the namevar). This leads to duplicate
declaration errors when the user tries to purge those keys through
the user { purge_ssh_keys } parameter.

Make the provider use an internal pseudo-name in such cases. Generated
resources get the same respective pseudo-name for successful purging.
It is composed of the file name and a numeric index.
(PUP-3357) unit tests for the purging of multiple unnamed keys

Just makes sure that the user type and ssh_authorized_keys provider
generate pseudo-names for keys following the same pattern.
(PUP-3357) integration test for purging of unnamed ssh authorized keys

Add an integration test with an ssh keyfile in which two keys have no name
and make sure that both are successfully purged.
Merge pull request #3164 from ffrank/ticket/3.7.x/PUP-3357-purge-unnamed-ssh-keys

(PUP-3357) purge unnamed ssh keys