Move off of EMMA and onto JaCoCo.

Summary:
Added `--jacoco` option for enabling JaCoCo for code-coverage.
`buck/buck-out/gen/jacoco/code-coverage/index.html` gives the detailed
code-coverage analysis

Test Plan:
Ran the unit tests with command - `buck test --all --jacoco --code-coverage`.
Don't output null values from buck.py json.

Summary: This saves us 10 MB of parsing garbage in `buck project`.

Test Plan: Unit tests, sandcastle
Reset the executable flag on `sh_binary` outputs

Summary:
Our zipping code doesn't preserve executable (or any other) file
permissions, so fetching executables from cache leads to a number of
"Permission Denied" errors for the genrules that try to execute them.
Hack `ShBinaryRule` to always set the executable flag on its output.

Test Plan:
Integration test included. Confirmed that this integration
test fails if the changes in this diff are commented out.
Fix change in intellij 13 which left us with a ton of top level modules.

Summary: Hide all non-top level modules by default.

Test Plan: unit tests, ran buck project, verified only 1 top level module
More explicit error messages when `ANDROID_SDK` etc. are set incorrectly.

Summary:
I accidentally had `ANDROID_SDK` set to the empty string.
This gave me a really confusing error message:

```
  java.lang.RuntimeException: /Users/bgertzfield/src/fbobjc was not a directory when trying to find sdk.dir
```

This clarifies the error message and adds tests.

Test Plan: Unit tests included. `ant unit` passes.
Fix NPE if ANDROID_SDK etc. are unset.

Summary: I accidentally introduced this in my previous revision.

Test Plan:
Wrote new test. Reproduced NPE in test:

    [junit] Testcase: testSdkPathFromEnvironmentReturnsAbsentWhenEnvironmentUnset took 0.003 sec
    [junit]           Caused an ERROR
    [junit] null
    [junit] java.lang.NullPointerException
    [junit]     at sun.nio.fs.UnixPath.normalizeAndCheck(UnixPath.java:77)
    [junit]     at sun.nio.fs.UnixPath.<init>(UnixPath.java:71)
    [junit]     at sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:281)
    [junit]     at java.nio.file.Paths.get(Paths.java:84)
    [junit]     at com.facebook.buck.cli.AbstractCommandOptions.findDirectoryByPropertiesThenEnvironmentVariable(AbstractCommandOptions.java:222)
    [junit]     at com.facebook.buck.cli.AbstractCommandOptionsTest.testSdkPathFromEnvironmentReturnsAbsentWhenEnvironmentUnset(AbstractCommandOptionsTest.java:240)

Applied fix, re-ran new test, confirmed it passed:

    [junit] Testsuite: com.facebook.buck.cli.AbstractCommandOptionsTest
    [junit] Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 sec

(snip)

    [junit] Testcase: testSdkPathFromEnvironmentReturnsAbsentWhenEnvironmentUnset took 0.001 sec
Introduce `JavaAbiRule` interface.

Summary:
Now non-`JavaLibraryRule`s can also be considered while computing the
ABI key in `DefaultJavaLibraryRule`.

This interface will be used in an upcoming diff to ensure a `JavaLibraryRule` gets
rebuilt if one of its `DummyRDotJava` dependencies is rebuilt.

Test Plan: ant test, sandcastle builds.
Set project SDK properly for plugin, but also exclude it from the build until it actually builds.

Summary:
Can now run tests and do builds from IntelliJ again.
Exclude IntelliJ plugin from build

Test Plan: ant clean; Build -> Make Project from IntelliJ
Log exit code to chrome trace.

Test Plan: Unit tests.
Introduce Buildable.getEnhancedDeps().

Summary:
A `Buildable` should be able to alter its deps via graph enhancement.
A `DescribedRuleBuilder` will query the `Buildable` to see whether it
changed its deps before assigning them to the corresponding `BuildRule`.

Test Plan: Unit test.
Change android_manifest so it depends on manifest files, not build rules.

Summary:
Note that existing instances of `android_manifest` must change their
`deps` argument to be `library_deps`.

Test Plan:
Sandcastle builds.
Remove list of java files from javac command-line; use `@classes` instead.

Summary:
Replace [potentially long] list of .java files in javac command-line debug
output by file with `@classes` param.

Test Plan:
Tested on one of the android projects
1) Take any buck java project
2) Insert something in source code so that it won't compile
3) run 'buck build <project-name>'
4) it should output error log
5) the last line of this log should be javac command with all the arguments
but without list of java files to compile. Instead it should end with `@buck-out/java_files_to_compile`.

Also unit tests in JavacInMemoryStepIntegrationTest and JavacInMemoryStepIntegrationTest.
Watch Watchman.

Summary:
Previously buckd would allow Watchman to fail silently, which could
result in file changes being missed by buckd and so invalid builds to be
created. This diff causes buckd to conservatively fail the build and report
Watchman failures to the user to ensure that all sucessful builds are valid.

Test Plan: buck test --all
Update nailgun.

Summary:
Updates nailgun to https://github.com/martylamb/nailgun at commit
`4cac9ae177a9a7e641615b106140093c3d28771a`,
 which fixes a number of issues around client disconnection.

Test Plan: buck test --all
Option to whitelist strings in certain BUCK modules.
Update `android_resource()` parameter to match changes in rule builder.

Summary: Missed this with other updates in the last diff.

Test Plan: sandcastle
Move generating and compiling R.txt/R.java to a separate buildable.

Summary:
If `DefaultJavaLibraryRule` depends on any android resource rules, we do a bunch
of extra steps to generate and compile `R.java`. This moves it to a separate rule
since it doesn't need to wait for dependencies of `DefaultJavaLibraryRule` to
complete.
Remove neo4j from Buck.

Summary:
Buck is licensed under the Apache 2 license, but neo4j's community edition is GPLv3.
The two are not compatible. Yank the code that depends on neo4j for now while we
find a more workable solution.

Test Plan: Code still compiles.
Attempt to provide the user with more information when a build rule cannot be found.

Summary:
Telling a user that a build rule cannot be found isn't particularly actionable. Although
we may not have a vast wealth of information available, we do know the target that the
missing dependency is from. That's a useful bit of diagnostic information, so including
that in the error message would be nice.

Test Plan: buck test --all
Remove references to neo4j in some config files and build scripts.

Test Plan: Sandcastle builds.