Collection integration test output

Previously, integration tests (i.e. the tests that were run using
Open3.popen3) did not have their output governed by the :show_output
flag the way the other tests did.  In addition, turning the
:show_output flag on for a test could potentially cause the test to
fail if it needed to examine the output for some value.  This was
because collection and console output were mutually exclusive.

This change fixes both issues.  First, output is now tee'd into the
stdout and stderr StringIO streams and optionally the STDOUT and
STDERR streams as well depending on the :show_output flag.  An
integration_helper was also introduced that encapsulated the behaviors
for starting, running, capturing the output of, and returning the exit
status of integration tests.
Merge branch 'popen-output'
Code climate improvements to Spring Insight framework

[#59478422]
Refactor DownloadCache

While refactoring DownloadCache to reduce its complexity, the
following bugs were observed and fixed:

* Bad response codes were ignored [#61019884]

* Download file size was not checked [#61534840]

* Cache reads were serialised [#61212414]

The following helper classes were factored out:

1. FileCache

The file cache handles persistence of data, etag, and last modified
timestamp. It ensures that mutation operations are performed under an
exclusive lock and that read operations are performed under a shared
lock or an exclusive lock.

2. InternetAvailability

This class encapsulates whether or not the internet has been checked
and whether or not it is deemed to be available. Internet availability
may be statically configured in config/cache.yml.

3. BuildpackStash

The buildpack stash is another name for the read-only buildpack cache,
which the class encapsulates.

Acknowledgement

Thanks to Steve Powell for reveiwing the code and identifying some
documentation improvements and the need to check the cache again once
the exclusive lock is obtained (to avoid multiple processes
downloading the same file in short succession).

[#59478422]
Merge 59478422-code-climate to master

[Completes #59478422]
Introduce Application abstraction

Originally, this work was intended to fix a bug were paths on the
command line of a Play 2.2 application were not relative to the root
of the running Play application (because Play changes the working
directory).  In order to fix this problem, the codebase had to be
changed to use Pathname instead of File, Dir, and Strings.  This
allowed us to more easily calculate relative paths.  In addition, to
uniformly guarantee that $PWD was prepended to all path related to
+JAVA_OPTS+ an Application abstraction was introduced.  It
encapsulates the common behaviors done by components so that they are
handled consistently.  This abstraction isn't required to be used (all
of the context variables still exist) but it should be considered the
way forward.  Eventually, the context variables will be deprecated and
removed in favor of this abstraction.  Finally, the codebase was
cleaned up to meet the following set of rules:

* Minimize the use of Pathname.new
* Minimize the use of File and Dir
* Minimize the use of Shell (in favor of FileUtils)
* Minimize the use of @app_dir

[#59473228][#57290028][#59331620]
Merge 59473228-relative-paths to master

[Completes #59473228]
Avoid Groovy container detecting when there are .class files

Rather than code exceptions for specific files, such as
logback.groovy, ensure the Groovy container does not detect when there
are one or more .class files present.

[#61282032]
Avoid Spring Boot CLI container detecting shebang files with classes

[#61656448]
Merge 61282032-class-files-not-groovy to master

[Completes #61282032]
Separate Play 2.2.0+ applications

This change adds support for dist and staged Play 2.2 applications as
separate types.  This was non-obviously implemented previously, but
did not make the cut when the big refactoring happened last week.

[#59473228]
Merge 59473228-relative-paths to master

[Completes #59473228]
Helper behaviors

This change adds some helper behaviors that can be used by downstream
components.  Specifically, this adds the ability to execute a block
with JAVA_HOME set, and makes the copy_resources and download_jar
methods a bit more robust.
Add MariaDB JDBC framework

The MariaDB JDBC driver is used instead of the MySQL JDBC
driver since its license terms are more favourable.

[#52325391]
Merge 52325391-mariadb to master

[#52325391]
Add Postgresql JDBC framework

[#52325263]
Merge 52325263-postgres to master

[Completes #52325263]
Upgrade Ruby

This change upgrades the required version of Ruby to 1.9.3-p484 due to
a security vulnerability in 1.9.3-p448.

[#61839004]
Merge 61839004-ruby-upgrade to master

[#61839004]
Default repository root

Previously, all of the repository_root declarations in the component
configurations used the common
http://download.pivotal.io.s3.amazonaws.com domain for their
repositories.  Since any user wanting to move the repositories to a
different location (e.g. replication behind a firewall) would have to
change many files, this change abstracts the repository root
declaration.  It does this by introducing a {default.repository.root}
substitution variable for repository_roots.  This placeholder is
substituted with a value configured in config/repository.yml.  The use
of this placeholder is not required.

[#57585912]