Ensure System.exit is called even if we throw an exception all the way to main.

Summary:
Encountered an issue in practice while re-working buck's interaction
with buck.py whereby an IOException (part of the checked signature of
most of the main() machinery) would cause buck to stall waiting on
non-daemon threads to die that are never going to.

There are a variety of reasons why IOException should not have been
allowed to go all the way to main, but regardless those bugs should be
caught more gracefully so that we print the stack trace (just like we
would've before) and exit the process so that the user is not confused
about the state of the process.

Test Plan:
Modify the code to throw an arbitrary IOException and verify that the
process now stops as expected.
Add forkmode="perBatch" in build.xml to speed up `ant test`.

Test Plan:
Without this change, `ant test` takes 2m53s.
With this change, `ant test` takes 0m35s.
Fix Genrule (and ApkGenrule) so that it works with integration tests.

Test Plan:
I am using Genrule in an upcoming integration test,
so I used that test to verify that this works.

Sandcastle builds.
Tweaks to genrule() documentation.

Test Plan: http://localhost:9811/rule/genrule.html
Create an integration test to demonstrate how compiling .src.jar files should work.

Summary:
This is designed to address a common use case when compiling a combination of
auto-generated and hand-generated Java code.

In the spirit of TDD, this is an integration test that also serves as an example
of the new API that I want to implement. The idea is that if a file in the list
of srcs passed to a java_library() rule ends in ".src.jar", then all entries in the
JAR that end in ".java" will be treated as if they were ordinary Java source files
included in the `srcs` diff.

A follow-up diff will update JavacInMemoryStep to make this test pass,
and include the appropriate updates to `docs/rule/java_library.soy`.

Test Plan: Sandcastle builds.
Try to reduce the use of BuildContext.getProjectFilesystem().

Test Plan: Sandcastle builds.
Add support for .src.zip files as inputs to java_library() rules.

Summary:
If a .src.zip file is included in the list of srcs passed to a
java_library() rule, then any entry in the ZIP file that ends in
".java" will be included as a Java source in the compilation of the
rule.

Test Plan:
CompileSrcZipIntegrationTest
http://localhost:9811/rule/java_library.html
Log the type of cache hit with each build rule event.

Summary: This will enable us to log how often we build rules with the various types of success.

Test Plan: Unit tests