Ensure missing cached file behavior

Previously, the DownloadCache did the right thing (re-download) a file
when it had been moved out of the cached location as part of block
execution.  However, it was not clear from the test code that this was
its intended behavior.  This change adds a test that explicitly tests
this behavior.

[#52124997]
Merge 52124997-missing-cached-file to master

[Completes #52124997]
Force UTF-8 encoding when reading Groovy files

Previously, when opening Groovy files to inspect their contents, we
relied on the default encoding of the runtime.  This caused issues
when reading a file that had a different encoding than the default.
This change forces the encoding to be UTF-8 at all times.

[#54176012][#5]
Merge 54176012-groovy-container-error to master

[#54176012]
Exclude vendor/** from rubocop

Over the weekend Travis CI changed where bundles were installed during
testing.  This change excludes those bundles from the rubocop scan.

[#54180350]
Merge 54180350-rubo-cop to master

[Completes #54180350]
Create a basic logging framework for the buildpack

This consists of a LoggerFactory class in a Diagnostics module. The
module also contains some common constants and a method to determine
the diagnostics directory

The LoggerFactory class manages a single instance of a subclass of the
standard Ruby Logger. In normal usage, only one logger should be
created:

    logger = LoggerFactory.create_logger(app_dir)

 The created logger can be retrieved from the LoggerFactory to avoid
 having to pass it around:

 	logger = LoggerFactory.get_logger

Logging follows the style of the standard Ruby logger, which supports
both parameter and block forms:

	logger.info('success')
	logger.debug { "#{costly_method}" }

The logging level is configured by setting an environment variable
JBP_LOG_LEVEL to one of:

DEBUG | INFO | WARN | ERROR | FATAL

The default value if JBP_LOG_LEVEL is not set is configured in
config/logging.yml for consistency with other buildpack configuration
and in case someone wants to change it in a fork of the buildpack.

If JBP_LOG_LEVEL is set to an unrecognised value, the logging level is
set to DEBUG for safety (for instance, the user may have guessed that
TRACE is a valid value).

The logging level in JBP_LOG_LEVEL or config/logging.yml may be
specified using any mixture of upper and lower case.

Ruby's verbose and debug modes overrides the default logging level in
config/logging.yml to DEBUG. However, JBP_LOG_LEVEL still takes
priority.

Log entries are written to both app/.buildpack-
diagnostics/buildpack.log and $stderr.

Log entries are verbose and include full details of the caller such
as the full path of the Ruby program making the call.

Set $stderr to synchronous writing.

Introduce debug logging of stack traces.

Introduce a Buildpack.drive_buildpack_with_logger method to create a
logger and then yield a new Buildpack instance to the given block.
Make the Buildpack constructor private so it cannot be called from
elsewhere. This ensures that any Buildpack instance has a logger
available to it.

Create a logger in the spec helper to ensure that any class under test
which needs a logger will have one. The LoggerFactory tests override
this by re-creating the logger.

Issue warnings if the logger is re-created, but suppress these
warnings when testing the LoggerFactory and the Buildpack classes.

Remove the diagnostic directory from the buildpack context

Substitute the buildpack.log filename into killjava script rather
than hard-coding it.

Link to stackoverflow article on installing gems in support of
the RubyMine debugger.

[#52775343]
Keep Rubocop happy

[#52775343]
Merge 52775343-verbose-environment-variable to master

[Completes #52775343]
Log web.xml before and after modification

Also log that we are changing web.xml rather than writing straight
to STDOUT.

[#53222667]
Merge 53222667-log_web_xml_edits to master

[Completes #53222667]
Re-instate puts

Rather than clutter the buildpack standard error with an INFO log
message, just write to STDOUT.

[#53222667]
Merge 53222667- to master

[Completes #53222667]
Issuing warnings using logger

Fix the corresponding testcase to clear buildpack.log before each
test and check the log for the required output.

[#54192868]
Merge 54192868- to master

[Completes #54192868]
Factor out duplicated code

Create a new download utility method to contain the previously
duplicated code.

[#54205148]
Merge 54205148-code_climate to master

[#54205148]
Narrow Groovy container detection criteria

No longer test for either the existence of a single .groovy file or
for a file named main.groovy or Main.groovy. The remaining detection
criteria are sufficient.

Tidy up the tests on the basis of the new detection criteria.

[#54271200]
Merge 54271200-narrow-groovy-detection-criteria to master

[#54271200]
reformat