Correctly indicate that inner classes are inner classes when creating the ABI jar.

Summary:
Although the ABI was being calculated sufficiently well for us to be able
to detect changes in public ABI by hashing the jar, it wasn't possible to
compile code against the abi jars when calling inner classes. This change
adds a test to verify that this is possible.

Test Plan: buck test --all
Optionally set the bootclasspath from buckconfig

Summary:
When specifying a source level, it is recommended that the bootclasspath
is set. The value of the bootclasspath depends on the source level so it
should be clear that setting this globally isn't a great idea.

This diff allows a bootclasspath to be configured per java source level,
using a config section such as:

  [java]
  bootclasspath-7 = some/clever/path.jar:someother.jar

No validation of this bootclasspath is done.

Test Plan:
buck test --all

Take a large codebase with Java 6 dependencies and compile with Java 8. Before this change, the compilation with Java 8 fails. After it, the compilation succeeds.
Identify and fix all problems preventing guava compiling against an ABI JAR of Java 6.

Summary:
It should be possible to compile a complex java project against the ABI JAR
prepared by `StubJar`. As a stress test, I created an ABI JAR of the Java 6
rt.jar and tools.jar from the official Oracle JDK/JRE, created a buckconfig
setting those stub jars as the bootclasspath for sourceLevel 6, & proceeded
to build guava.

This diff represents the changes required to get this process to work, with
reduced test cases added for all detected issues.

Test Plan:
Iteratively attempt to follow the summary above, adding new test cases.
buck test --all
Make Apple descriptions delegate build rule creation to CXX descriptions.

Summary:
Apple binaries and libraries can be built by CXX binary and library respectively
as long as the constructor args are converted properly. This makes those two
Apple descriptions delegate to the CXX ones.

Test Plan: CI
Remove CxxPlatform#getName.

Summary:
CxxPlatform#getName is only used to insert a human readable name in
the error messages. The name of the flavour is human readable enough.

Test Plan: CI