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