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 either $stdout or $stderr depending on
the severity of the log message.

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.

[#52775343]