(PE-2586) Support using frictionless install for upgrades

We now only use frictionless install for versions that support it. This
way we can test frictionless upgrade (which is identical to install)
from non-frictionless installs of older versions, while also testing it
from frictionless installs for versions that support it.
Add forgeapi stub to support forge api v3

Version 3 of the forge api will have a canonical source at
forgeapi.puppetlabs.com.

This patch adds this source as a source for the forge stub so
that beaker can set the environemnt to respond correctly for both
version 1 and version 3 of the api.
Merge pull request #112 from nicklewis/upgrade-frictionless-agents

(PE-2586) Support using frictionless install for upgrades
Add :expect_changes to apply_manifest_on()
cut a beaker 1.4.0 beaker gem
(PE-2627) Use generic install.bash to install frictionless agents

Rather than use a platform-specific script, we now have a generic
install.bash script which can be used to install agents of any platform.
Because install.bash downloads the platform-specific script, using it
effectively tests the correctness of both scripts.
Merge pull request #121 from nicklewis/PE-2627-use-agent-install.bash

(PE-2627) Use generic install.bash to install frictionless agents
Merge pull request #120 from anodelman/make-gem

cut a beaker 1.4.0 beaker gem
Merge pull request #119 from hunner/expect_changes

Add :expect_changes to apply_manifest_on()
(QA-753) Make sure to still support saving MSIs locally

The initial commit for QA-753 didn't account for the MSI case, which
still requires saving the .msi file locally. This adds a save_locally
option to the cURL command line, based on whether we're fetch an msi.
Merge pull request #122 from branan/fix_windows_pe_installation

(QA-753) Make sure to still support saving MSIs locally
cut beaker1.4.1 gem
Merge pull request #123 from anodelman/make-gem

cut beaker1.4.0 gem
(QA-773) Support installing any frictionless agent on any master

Previously, beaker only supported installing a frictionless agent if
it had the same platform as the master. This code allows heterogenous
deployments by properly classifying the master for the platform of
each frictionless node in the configuration.

This is (once again) kind of a quick-and-dirty solution. It'll get
cleaned up as part of QA-769, wherein we refactor the mess known as
the PE installation code.
Merge pull request #125 from branan/heterogenous_frictionless_support

(QA-773) Support installing any frictionless agent on any master
(QA-775) allows beaker to run with no master defined

- what is says on the tin
Merge pull request #126 from anodelman/no-master

(QA-775) allows beaker to run with no master defined
(QA-723) add preserve hosts on failure option to beaker

- still support fast/slow fail modes, in slow mode will continue to
  attempt to run tests + test suits
- create preserve_hosts modes:
  always = keep 'em around no matter what
  onfail = only preserve if there was a failure during testing
  never  = kill 'em no matter what
- added spec test coverage for these modes
Merge pull request #124 from anodelman/preserve-on-failue

(QA-723) add preserve hosts on failure option to beaker
create beaker 1.5.0 gem