(PUP-2871) Add :install_options and :uninstall_options to the pacman provider

Without this patch, a user unfamiliar with the pacman provider might write
attempt to add flags to install and uninstall, not knowing that they will fail.
This patch adds support for these two flags to ensure a more cohesive experience
across puppet.
(PUP-2757) Check for env change before updating Configurer context

Previous work on PUP-2757 ensured that resource references would use the
current environment and that agent runs would use a correctly
initialized 'remote' reference environment, but, ironically, Charlie
Sharpsteen found that the fixes for agent runs re-introduced the
duplication of initial environment import in the Puppet apply case.
Removing that duplication of effort was the reason for the initial
change.

This commit tests whether the environment has changed, which it should
only do in the agent case, and, if not, pushes the original env onto the
context stack.  We push regardless, so that we don't have to guard the
corresponding pop.
(PUP-2882) Verify available versions

Prior to this commit we didn't check up front to make sure there is a version
matching what is requested by the --version flag. This changed the error given,
which made acceptance tests fail.

This commit adds a check before even attempting to build a graph to ensure that
there is a compatible version.
Merge pull request #2905 from jpartlow/issue/master/pup-2757-check-if-env-is-same

(PUP-2757) Check for env change before updating Configurer context
Merge branch 'master' into puppet-4
(PUP-2948) enable rubocop for travisCI

Before this commit, rubocop was executed for each ruby platform in travisCI.
This commit enables rubocop only for the latest ruby platform (2.1.1). In a
nutshell, the changes included are

- Add rubocop step in travis CI
- Ensure rubocop is present in test group
- Ensure rubocop is not added for ruby 1.8
Merge pull request #2889 from vrthra/rubocop/puppet-4/enable-travisci

(PUP-2948) enable rubocop for travisCI
Merge pull request #2913 from highb/fix/master/pup-2882_check_available_versions

(PUP-2882) Verify available versions
Merge remote-tracking branch 'upstream/master' into puppet-4

* upstream/master:
  (PUP-2882) Verify available versions
(PUP-2948) enable rubocop for travisCI

Previously, the Rubocop gem was added to development and testing groups without
any further constraints. However, this caused failures in windows platform, due
to its dependency on json. Since we are using only multi-json, we do not want
to have this dependency added. So this commit restricts rubocop to
non-windows native rubies.
Merge pull request #2916 from vrthra/rubocop/puppet-4/gem-fix

(PUP-2948) enable rubocop for travisCI
(maint) use RSpec helpers over instance and local variables
(maint) Isolate specs from whether yaourt is installed
(PUP-2871) Concatenate install install_options to argv

Before this commit, install_options were passed as a nested array to
pacman/yaourt. This commit changes that to concatentate the values
with the argument vector.
(PUP-2871) Concatenate uninstall_options to argv

In the same manner as 9137faf uninstall_options were being appended as a
nested array value; this commit changes the uninstall method to
concatentate options to the array.
(maint) Make pacman (un)install_options private

These methods should not be called by any outside class; this commit
makes them private and removes the tests that invoke them directly.
(PUP-2388) Puppet acceptance for Ruby 2 x64

 - Select puppet-win32-ruby branch based on the :ruby_arch host variable
 - Apply permissions a little differently based on how file paths are
   setup in the newer Ruby 2 builds
 - Note that at this time, the puppet-win32-ruby build for x64 does not
   work on Windows 2003 x64 due to 2 missing functions in MSVCRT on that
   platform
 - YAML job definitions are updated in subsequent commit
(PUP-2388) Update Windows Jenkins matrix defs

 - Ensure that there are single YAML files per job type, which allows
   for a more granular selection of node definitions through Jenkins.
   NOTE: by using job definitions that are laid out horizontally
   (by file), rather than adding multiple node definitions to a single
   YAML file, this allows for better parallel execution of the suite.
   Agent requests are presently serialized within Beaker when all agent
   definitions occur within a single YAML configuration.
 - In that vein, trash these (though Git may show some as renamed):
    win2003-all.yaml
    win2008-all.yaml
    win2012-all.yaml
    windows-all.yaml
 - Spec out all valid combinations of 2003, 2003R2, 2008, 2008R2, 2012
   and 2012R2 with Ruby x86 and Ruby x64 where applicable, depending
   on what the platform supports.
 - Not all of these configurations will be used, but keep all of the
   definitions for the sake of local testing / maintaining a valid list
   of operating systems where Puppet could be run on Windows.
 - Note that FILECOUNT was also removed as a Beaker option where it was
   defined, since it is a deprecated option.
 - Note that at this time, the puppet-win32-ruby build for x64 does not
   work on Windows 2003 x64 due to 2 missing functions in MSVCRT on that
   platform
Merge pull request #2918 from adrienthebo/fixup/master/pup-2871-install-uninstall-options-pacman

Fixup/master/pup 2871 install uninstall options pacman
Merge pull request #2903 from Iristyle/ticket/master/PUP-2388-Puppet-acceptance-Ruby-2

(PUP-2388) Puppet acceptance for Ruby 2 x64