(PUP-2628) Add members to groups instead of full list for Windows

Previously, if you wanted to use the group resource you needed to specify the
entire list of members as the windows provider ignored the auth_membership
setting and was always the authoritative list. This ensures that the windows
provider respects the auth_membership setting.
(PUP-1293) Don't ignore status when using upstart provider

Since the upstart provider is overriding the status function,
it also overrides the default behaviour from the base service provider.

With this patch, if the status resource exists or hasstatus is set to false,
the default behaviour, from the base provider, will be invoked.
(maint) Remove unused scope from closure call_by_name

The big removal of 3x parser/ast missed to remove the unused scope
that was present in Closure#call_by_name.

This commit removes the unused scope, and corrects a typo in code that
supports use cases not yet merged to master (if invoked would cause a
hard stop on undefined variable 'scope').
(PUP-1362) (PUP-1775) remove :python command

No longer needed after removal of yumhelper.py
(PUP-1362) (PUP-1775) map yumhelper.py's -e & -d flags to yum

The -e & -d flags to yumhelper.py had different semantics than yum's -d & -e
flags.  The yum equivalent option flags are --enablerepo & --disablerepo.
(PUP-3700) Deactivate invalid actions on faces

Instead of documenting that certain actions are invalid they should
be removed instead.

Add the deactivate_action on faces to do this
(maint) Improve comment about "scope state" and closure
(maint) Allow non-root users to traverse tmpdir

This test creates a tmpdir, initially owned by root:root and mode 0700,
and executes `puppet agent` with an ssldir contained within the tmpdir:

    puppet agent --ssldir /tmp/autosign_command.XXXX/ssldir-autosign

Puppet will manage the owner/group/mode of the ssldir (but not its
parent) by temporarily switching uid/gid to the `puppet` user & group,
create the directory, etc, and then switch back. If the parent
directory has mode 0700, then the `puppet` user is not allowed to create
a directory within the parent.

Previously, the test used puppet apply to switch the owner and mode of
the parent directory. This works by accident on some platforms, e.g.
Windows, because there is a setup step that will create the `puppet`
user and group.

But in PE, that is not the case, so this test would fail in PE on
Windows with the error:

    Could not write /tmp/autosign_command.jwi1dW/ssldir-autosign/\
      private_keys/hj6ml6atya3wuiz.delivery.puppetlabs.net-autosign.pem \
      to privatekeydir: Permission denied

This commit modifies the test to allow `group` and `other` read and
traverse permissions on the parent directory, and doesn't require the
existence of the `puppet` user.
Merge pull request #3345 from joshcooper/maint/master/autosign_permissions

(maint) Allow non-root users to traverse tmpdir
Merge pull request #3329 from hlindberg/MAINT_remove_unused_scope_call_by_name

(maint) Remove unused scope from closure call_by_name
(PUP-3624) Refactor log setup

Previously, the cert, doc, and face based applications had the same
logic for checking if `--verbose` or `--debug` was specified on the
command line, and setting the log level appropriately.

This commit refactors those applications to just call the
`Puppet::Application#set_log_level` method instead. The doc application is
a little bit unique in that it changes the default log level from
`notice` to `warning`, and it explicitly sets a console log destination.
(PUP-3624) Log at least at info level when --verbose is specified

The change for PUP-2998 means if you have `log_level=debug` in your
puppet.conf, then `puppet agent --test` will reduce the log level to info,
because `--test` implies `--verbose`.

This commit changes the semantics of `--verbose` (and `--test`) so that
we log *at least* at that level, but we won't downgrade.  This affects
all Puppet::Applications, e.g. puppet apply, agent, etc.

Note this wasn't an issue before PUP-2998 was implemented, because
log_levels could only be specified on the command line.
(maint) Raise ruby test version from 2.1.1 to 2.1.5
Merge pull request #3347 from dalen/ruby215

(maint) Raise ruby test version from 2.1.1 to 2.1.5
Merge remote-tracking branch 'upstream/pr/3335'

* upstream/pr/3335:
  (PUP-1362) (PUP-1775) map yumhelper.py's -e & -d flags to yum
  (PUP-1362) (PUP-1775) remove :python command
(PUP-3702) fix zone type on solaris10

Solaris10 does not inherit /sbin from the global zone by default.
This makes the zone un-bootable (ensure => running fails).
Add inherit => "/sbin" as a default to make solaris10 operate like
solaris11.
fixup the quotes on some tests to make them more consistent
(PUP-3436) Optimize CPU intensitive Compiler methods

This commit contains some performance optimizations in methods
that showed up as very time consuming in the profiler when running
the rake following rake tests:

benchmark:many_modules:run
benchmark:defined_types4:run
benchmark:defined_types:run

CPU consumption with this patch in place is between 70% - 75% of
what it used to be.

Profiling was performed using stackprof
https://github.com/tmm1/stackprof
(PUP-3436) Add optimized copy-constructor for Resource.

The Resource::copy_as_resource first created a new Resource
instance with all bells and whistles which means extracting
title, munching, and tagging. This commit ensures that these
fields are more effiently initialized when the source is
known to be a Resource.
(PUP-3436) Prevent unnecessary copying of tag sets.

This commit removes an unnecessary cloning of a tag set in the method
Puppet::Parser::Resource#add_scope_tags. It also removes unnecessary
processing of the tags since they have undergone this processing
already.
Merge branch 'PUP-3436_optimize-cpu-intensive-compiler-methods'