initial prototype for acceptance test libraries

* Adds a "helper.rb", which you can use by adding "--helper" to your
  call to systest.rb.  Current implementation doesn't do anything
  except for add puppet/acceptance/lib to your LOAD_PATH, which
  gives you the ability to do "require 'puppet/acceptance/*'" from
  within your tests.
* Adds acceptance/lib/puppet/acceptance/temp_file_utils.rb, which
  contains a bunch of utility methods for dealing with temp files,
  file permissions, etc. from within your acceptance tests.
* Modifies "7316_apps_should_be_available_via_pluginsync.rb" to
  use this new library instead of manually defining all of the
  utility methods.
Refactor acceptance tests to use util library

This commit adds utility methods to "temp_file_utils.rb"
and refactors all the tests that were duplicating these
utility methods to use this library code instead.
(#14378) Skip context-based optimisation for complex expressions

When optimising loaded files based on the context given, the context would be
passed into a path expression itself inside quotes.  If the user had given a
path expression for the context that contained quotes then these would need to
be escaped, which Augeas doesn't support today.

This disables the optimisation when the user supplies a complex context path,
preventing errors caused by improperly quoted paths.
Merge remote-tracking branch 'upstream/2.7.x' into 3.0rc

* upstream/2.7.x:
  (#8858) Explicitly set SSL peer verification mode.
  Test SSL setup code, not our stubbing of it.
  (maint) Add mailmap to identify contributors
  Updating CHANGELOG, conf/redhat/puppet.spec for puppet 2.7.15rc4
  (#14723) Fix http report description
  Remove EL-related test changes from this commit.
  Revert changes to symbolic_modes.rb -- this test should indeed be pending (it should eventually work on Windows).
  Update acceptance tests to use confine instead of skip_test loops

Conflicts:
	CHANGELOG
	conf/redhat/puppet.spec
(#14789) Fix inconsistent normalization and API in autoloader

Since I didn't get around to adding a require method to the autoloader, it
still makes sense to have the loaded? method exposed on instances. I also
added the changed? method, which would be useful in similar situations.
Testing these changes revealed inconsistency about how names are normalized,
which is also fixed in this commit.
Merge pull request #840 from pcarlisle/ticket/master/14789-autoloader-loaded

(#14789) Fix inconsistent normalization and API in autoloader
Update facter dep to reflect epoch 1

This commit updates the dependency on facter
to include the epoch 1. Without this commit,
now that facter 1.6.9 is epoch 1, rpm sees
facter 1:1.6.9 as > 2.0.0, preventing puppet
2.7.x from installing on systems with facter
1:1.6.9. This commit resolves this issue.

Signed-off-by: Moses Mendoza <moses@puppetlabs.com>
(#14900) Add data bindings hiera-puppet support.

Data binding now supports the hiera-puppet backend. When looking up data
in Hiera we now call the `Hiera#lookup` function with the Puppet scope
object instead of the host's facts (Hash).

We also remove the need to fetch node facts for every lookup; the scope
object already contains this info. The scope object provides access to
Facter Facts via the `Scope#[]` method.

This patch includes updated tests.
Merge pull request #843 from kelseyhightower/ticket/3.0rc/14900_data_bindings_does_not_support_hiera_puppet_backend

Ticket/3.0rc/14900 data bindings does not support hiera puppet backend
(#14843, #14844) Add block to Puppet::Provider.execpipe

Previously the execpipe wrapper in Puppet::Provider only accepted and passed a
block if called from a provider instance, and not the class. This led to
providers failiing with messages of "No block given". This commit brings the
class wrapper in line with the instance wrapper, adding a block to its argument
list and to its Puppet::Util::Execution.execpipe call.
It also adds a single test for the rpm package provider, to verify sanity of
self.instances.
(#14927) Set node environment correctly in termini

The node environment was only being set correctly in the exec terminus. This
sets it in the other relevant termini. It also involved significant rewriting
of tests to not mock node objects.
(#14901) Refactored test to improve readability

There was a fair amount of duplication in testing the option parser. By
removing that the tests become much more readable.
(#14901) Use the last argument when there are duplicates

Previously, Trollop would raise an error if the command line contained
duplicate arguments. This caused the application to ignore all arguments
because of the error handling around Trollop. The argument handling will
now accept duplicate arguments, but will only use the last duplicate's
value. This is the same as the behaviour of 2.7.
(#14901) Simplify argument handling in option parser

Option specification had been done with a series of shifts and pops to
handle an optional second parameter. Checking the length of the
arguments array is an easier to understand way of achieving this.
(#14901) Consistent handling of argument parsing errors

We could previously swallow errors because the error handling code for
argument parsing only propogated errors in certain cases. By removing
the special case for error handling we should be much more robust with
respect to errors during argument parsing.
Merge pull request #846 from haus/ticket/3.0rc/14843_add_block_to_self_execpipe

Ticket/3.0rc/14843 add block to self execpipe
Merge pull request #842 from MosesMendoza/update_facter_dep_to_include_epoch_1

Update facter dep to reflect epoch 1
When changing environment make sure to state what the new environment is
Merge pull request #850 from zaphod42/bug/3.0rc/14901-duplicate-args-remove-all-args

(#14901) duplicate args remove all args
Merge pull request #848 from pcarlisle/ticket/master/environment-caching

Ticket/master/environment caching