[buck] Better error message if build-tools are not installed.

Summary:
On the latest update of the Android SDK tools, certain tools
were moved from ##platform-tools## to ##build-tools##, and some need
to be installed manually by the user.

Buck shows an error, but it was previously vague.
Remove some questionable caching logic from AndroidBinaryRule.

Test Plan: Sandcastle builds.
Fix ApkBuilderStep.getShortName() so it returns an executable command.

Test Plan: Sandcastle builds.
Make annotation params part of a java_library's RuleKey.

Test Plan: Sandcastle builds.
Make sure InputRule and ProjectConfigRule are idempotent.

Summary:
In particular, `build(BuildContext context)` should always return
the same `ListenableFuture` object.
Also cleaned up `InputRule.getRuleKey()`.

Test Plan: Sandcastle builds
Clean Up Command Constructors

Summary: Simplify CommandRunner classes to have a single constructor taking a single CommandRunnerParams object.

Test Plan: ant; ant test; buck build buck; buck test --all
Remove .idea/ant.xml from version control since it is in .gitignore.

Test Plan: Sandcastle builds.
RuleKey of a BuildRule is a function of its deps' RuleKeys.

Test Plan: Sandcastle builds.
Honor @Ignore when applied to a method in a JUnit test.

Summary:
Apparently we were honoring `@Ignore` when applied to a test case
but not when applied to an individual test.

Test Plan: Updated unit test.
Inline comments for null values.

Test Plan: Sandcastle builds.
Create utilities to eliminate boilerplate from integration tests.

Summary:
Most integration tests need to clone a scenario folder under a relative
"testdata" directory, so TestDataHelper facilitates this.
A ProjectWorkspace can now be responsible for running Buck and reporting
the exit code, stdout, and stderr.
ProjectIntegrationTest has been simplified as a result (and no longer needs
a `tearDown` method) and serves as an example for future integration tests.

Test Plan: Sandcastle builds.
Incorporate javac configuration into JavaTestRule's RuleKey.

Summary:
Incorporate javac configuration into JavaTestRule's RuleKey, because the
output depends on how javac is run.

Test Plan: Automated tests.
Add targets that were missing from source_under_test.

Summary:
We were missing the following 11 files from our code coverage report:

  Ansi.java
  BuckConstant.java
  CapturingPrintStream.java
  Console.java
  DefaultDirectoryTraverser.java
  DirectoryTraversal.java
  HumanReadableException.java
  InputStreamConsumer.java
  MoreFiles.java
  ProcessExecutor.java
  ProjectFilesystem.java

Code coverage before:

  Overall line:  64% (5003.5/7802)
  c.f.buck.util: 81%  (499.1/619)

Code coverage after:

  Overall line:  64%  (5180.2/8073)
  c.f.buck.util: 76%  (675.8/890)

Test Plan: buck test --all --code-coverage
Improved heuristic for `buck project` and added a regression test.

Summary:
Libraries are supposed to be listed before modules in .iml files.
This was not necessarily the case when a test_target had a dependency
on a library rule in the same build file.

Test Plan:
Created an integration test to prevent a regression.

Note that no changes were necessary to `com.facebook.buck.command.ProjectTest`,
which implies that my changes to `Project` preserved the existing behavior for the
simpler uses of `buck project`.
Build rules bottom-up.

Summary:
Dramatically changed AbstractCachingBuildRule.build() so that a rule:

(1) Builds all of its deps.
(2) Computes its rule key.
(3) Compares its rule key to the one stored on disk.
(4) If the rule keys are different, it tries the ArtifactCache.
(5) If it has a cache miss, it builds the rule.
(6) If either (4) or (5) is true, then it updates the .success file.

Because the logic in AbstractCachingBuildRule changed so dramatically,
I commented out many of the existing tests in AbstractCachingBuildRuleTest
because they will take a considerable amount of effort to port,
but the test cases are good ones, so this needs to be done.

Still need to reinstate tests in DefaultJavaLibraryRuleTest and
AbstractCachingBuildRuleTest.

Test Plan: Sandcastle builds.
Broke up AndroidTransitiveDependencies into two parts to avoid requiring 'no_dx' field for android_manifest rule
moving android_manifest's out manifest file to a variable instead of a constant

Summary:
Instead of using a constant AndroidManifest.xml as the out file for android_manifest rule,
allowing the project to specify the outfile filename.
Make ProjectFilesystem available via ExecutionContext.

Summary:
This is needed for upcoming work where Steps that do not extend
ShellStep need to relativize file paths because unlike ShellSteps,
they are not executed from the root of the project directory.

Test Plan: Sandcastle builds.
Use ProjectFilesystem to relativize paths for Steps that do not extend ShellStep.

Summary:

Test Plan: Sandcastle builds.
Make ArtifactCache available via BuildContext.

Summary:
As a result, references to ArtifactCache can be removed
from a ton of places where it does not belong.

With this change, only the following classes reference `ArtifactCache`:

```
com.facebook.buck.cli.AbstractCommandRunner
com.facebook.buck.cli.BuckConfig
com.facebook.buck.cli.BuildCommandOptions
com.facebook.buck.cli.CommandRunnerParams
com.facebook.buck.command.Build
com.facebook.buck.rules.AbstractCachingBuildRule
com.facebook.buck.rules.BuildContext
```

and of course also:

```
com.facebook.buck.rules.CassandraArtifactCache
com.facebook.buck.rules.DirArtifactCache
com.facebook.buck.rules.NoopArtifactCache
```

Test Plan: Sandcastle builds.