Support main-class applications

Previously, there was no support for Java main() class applications.
This change adds the functionality required to run these kinds of
applications.  In addition to the work required for that, the
opportunity was taken to refactor the code base to be more composable.
Specifically this includes the breaking out of JRE, container, and
framework components which are dynamically loaded and called based on
configuration.  In addition to this, the documentation was
dramatically overhauled to describe how to configure and extend the
buildpack using the new structure.

[#49693913]
Merge 49693913-main-class to master

[#49693913]