Compute an ABI key as part of executing JavacInMemoryStep.

Summary:
The ABI key will be available after the Step has been executed.
Trying to access the ABI key before the Step has been executed
is likely a logical error, so it throws an IllegalStateException
in that case.

Test Plan: JavacInMemoryStepTest
Tidy up naming in the DefaultStepRunner

Summary:
Tidy up the DefaultStepRunner variable and method names, since these were missed in the
general StepRunner tidying. No logical changes.

Test Plan: buck test --all
Rollback computing the ABI in JavacInMemoryStep via an annotation processor.

Summary:
This rolls back a portion of bad922a388035369ab7bfca1d02740711f2049c8 because
apparently JavaCompiler.CompilationTask.setProcessor() overrides any
existing processors that were set via the options list. We do not want
to disable the list of processors set by the user.

Test Plan: Sandcastle builds.
Beef up code coverage of the com.facebook.buck.model package.

Test Plan: Sandcastle buidls.
Pass ProjectFilesystem into BuckConfig#createArtifactCache().

Summary:
This is a temporary workaround to pass a ProjectFilesystem into
BuckConfig#createArtifactCache() so that relative paths to a directory
cache get resolved correctly.

Ideally, ProjectFilesystem would be injected into BuckConfig's constructor
so that this would not be necessary. Making that change would be an easy fix
for BuckConfig, but it turns out to be quite a bit of work in terms of
updating BuckConfigTest.

I will file a task to do this the right way, but for now, this is on my
critical path for the ABI work, so I need to get unblocked.

Test Plan: Sandcastle builds.
Remove dependency on guava from the AbiWriter.

Summary:
It would be useful to use the AbiWriter as an annotation processor without requiring it
be compiled directly into buck (which also allows us to use other processors at the same
time) The code isn't terribly complex, so removing dependencies on anything other than
the JDK will work. That means that the single jar generated by buck needs to be included
when using the AbiWriter.

Test Plan: buck test --all
Use buck-out instead of legacy buck-bin and buck-gen directories.

Summary:
This removes a ton of conditional logic around which directories to write to.
The widespread removal of `MOE:begin_strip` is a good sign.

Test Plan: Sandcastle builds.
Add --skip-annotation option to 'buck project'

Summary:
Enables a workaround to skip generating annotation sources.  Running
'buck build' will still create the sources.

Test Plan: Ran a clean 'buck project' with and without --skip-annotation
Thread EventBus through all places we'd like to log.

Test Plan: Unit test
Fix Eclipse warnings.

Test Plan: Yellow icons go away in Eclipse.
Fix a regression in `buck audit owner` by relativizing file paths properly.

Summary:
This regression was introduced in b592dc1c1c01ffba5b72a3ecae202f7f2f10511c.

That diff introduced a change where paths were relativized before being
passed to the constructor of an `InputRule` in `AbstractCachingBuildRule.getInputs()`.
Unfortunately, `AuditOwnerCommand` was still using the `InputRule(String)` constructor
for an `InputRule`, which created an `InputRule` using `new File(String)`, which
means the `File` created for an `InputRule` in `AuditOwnerCommand` did not go through
the same path relativization as those created by an
`AbstractCachingBuildRule.getInputs()`. This mismatch caused the regression in
`buck audit owner`.

This diff eliminates the `InputRule(String)` constructor and forces `InputRule`s to
be created via a static method that requires a `pathRelativizer` as a parameter.
This also introduces `InputRuleTest` that ensures that the `BuildTarget` for an
`InputRule` is composed of only the relative path.

Test Plan: Sandcastle builds.
Modify a number of ShellSteps to use relative paths exclusively.

Summary:
Because these shell steps now take relative paths,
they can be resolved to absolute paths appropriately in
`getShellCommandInternal(ExecutionContext)` by
`ExecutionContext.getProjectFilesystem().getPathRelativizer().apply()`.
If we end up running `ShellStep`s on remote machines in the
future, this will make it easier to serialize a `ShellStep` and run it
on the foreign machine.
This also helps with integration tests that are run in [foreign] temp directories.

Test Plan: Sandcastle builds.
Re-introduce the ABI computation in JavacInMemoryStep.

Summary:
This turns out to be much more complicated than the original version
because this version relies on passing information through files whereas
the original version was able to pass the ABI key around in memory.

The code in the `com.facebook.buck.java.abi` package is now compiled
into a separate directory of `.class` files. This directory is specified via
`-Dbuck.abi_processor_classes` in `buck_common`, much like we do
for our testrunner.

`JavacInMemoryStep` now takes an optional path to a file where an ABI
hash should be written. If the path is specified, an
`AbiWritingAnnotationProcessingDataDecorator` is passed to
`JavacOptions.appendOptionsToList()`, which is used to include the
`AbiWriter` as an annotation processor.

In general, we expect most clients of `JavacInMemoryStep` to request
the ABI for the code being compiled, `UberRDotJavaUtil` being the
notable exception.

Finally, in an attempt to provide a layer of indirection around the
mangling of `AnnotationProcessingData` that occurs in order to inject
our annotation processor, this diff introduces the concept of
an `AnnotationProcessingDataDecorator` to "decorate" the user's
`AnnotationProcessingData` with our additional processor.

A `AnnotationProcessingDataDecorators` utility provides a default,
pass-through implementation of `AnnotationProcessingDataDecorator`.

Note that this diff does not add the logic where `DefaultJavaLibraryRule`
will read the ABI from the file written by `JavacInMemoryStep`,
as that will be done in a follow-up diff.

Test Plan: Sandcastle builds.
Shut down all executors before exiting to reduce spew

Test Plan: Tested broken test cases, verified less spew
Update DefaultJavaLibraryRule so it stores its ABI key when it is built.

Summary:
The main changes in this diff are to `DefaultJavaLibraryRule` and `AbstractCachingBuildRule`.
It adds a utility method to `MoreFutures` and introduces `AbstractExecutionStep` as a
convenience for constructing anonymous `Step` classes.
The bulk of the diff is updates to the existing unit tests,
as well as the introduction of an integration test, `DefaultJavaLibraryRuleIntegrationTest`.

Test Plan: Sandcastle builds.