Add Spring Boot CLI container

This incorporates detection logic which carefully avoids overlapping
that of the Groovy and Tomcat containers. (The detection criteria are
all documented.)

Compile downloads the Spring Boot CLI zip from a repository, unzips
it, and symlinks any classpath JARs into the lib subdirectory of the
unzipped file.

Release builds a command line which drives the spring executable from
the downloaded zip setting JAVA_HOME and JAVA_OPTS appropriately and
overriding the server port with $PORT. For non-web applications, the
use of $PORT should be harmless. The target files are all the Groovy
files in the application root directory.

Add Spring Boot CLI container to buildpack configuration

Rename variables in spec tests to avoid clashes.

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

[Completes #54204032]
Remove $MEMORY_LIMIT disclaimer

Now that $MEMORY_LIMIT is available during staging, the disclaimer
about it is removed.

[#52785711]
Merge 52785711-memory-limit-docs to master

[Completes #52785711]
Add New Relic support

This change adds support for bound New Relic services.  The framework
notices a bound service in VCAP_SERVICES.  During the compile phase,
the New Relic agent JAR is download and a default New Relic
configuration file is copied into place.  During the release phase, a
number of JAVA_OPTS are configured such that the New Relic service is
used during the application's runtime.

[#53027669]
Merge 53027669-new-relic to master

[Completes #53027669]
Enhance POGO detection

This change enhances the POGO detection algorithm so that it can
detect POGOs that extend or implement other types.  This change also
extracts a collection of Groovy utilities (currently centered around
detection) that are used by both the Groovy container and the Spring
Boot CLI container.

[#54518072]
Merge 54518072-pogos to master

[Completes #54518072]
Cache grapes locally

This change causes the Spring Boot CLI container to look for and cache
grapes locally in the application's directory.

[#54518442]
Merge 54518442-local-grapes to master

[Completes #54518442]
Use floating point for MemorySize division

Using whole number division resulted in close to default memory size
warnings in cases where the memory size was far from the default.
Using floating point division instead fixes the problem.

Add diagnostics and extra tests.

[#54997812]
Merge 54997812-inappropriate-default-memory-warning to master

[#54997812]
fix typo
Support profiles in Spring Boot CLI

This change adds documentation to the Spring Boot CLI and Tomcat
containers indicating the proper way to use environment variables to
set Spring profiles.  In addition, this change provides the current
environment (minus some well-known) keys to the components.

[#54518518]
Merge 54518518-spring-profiles to master

[Completes #54518518]
Make compile and release robust if detect fails

Compile and release now log errors if no application is detected.

[#53862463]
Merge 53862463-compile-release-robustness to master

[Completes #53862463]
Abort when compile or release fail to detect an application

[#53862463]
Merge 53862463-compile-release-robustness to master

[Completes #53862463]
Unify compile/release diagnostics

Rather than log an error and abort, raise an exception so that the
general exception handling in a calling stack frame will be used.

This reduces the amount of code and also provides a suitable
exception stack trace when debug logging is enabled.

[#53862463]