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]
Link to new builder

The new builder uploads Spring Boot CLI zip files to the corresponding
repository.

[#54204032]
Merge 54204032-spring-boot-cli-container to master

[#54204032]
Attempt to fix build failure

Delete the log file after closing it in case doing it the other way
round is the cause for the logger failing to be writable, as observed
on Travis.

[#54204032]
Merge 54204032-spring-boot-cli-container to master

[#54204032]