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
improve documentation of Groovy detection criteria
Extend version qualifier syntax

Allow version qualifiers to container periods ('.') to support
qualifiers such as are found in Spring Boot CLI versions.

[#54204032]