Skip watchman file change events for existing files.

Summary:
By default Watchman generates new file events for all
existing files within a watched root the first time a query is made
with a new clock. As buck only uses file change events to invalidate
cached data read from input files it is safe to pass the
"empty_on_fresh_instance" option to watchman queries which skips the
generation of events for existing files and so reduces the time spent
processing file change events when executing the first buck command. A
unique watchman logical clock name is generated for each
WatchmanWatcher so that watchman can determine first queries from each
Buck process and to avoid queries from different Buck processes
interfering with each other.

Test Plan: buck test --all
Fix pmd build break (avoid empty catch blocks)

Summary:
Fixes broken buck smoke builds:

```
pmd:
  [pmd] .../test/com/facebook/buck/parser/BuildTargetParserTest.java:251:  Avoid empty catch blocks
  [pmd] .../test/com/facebook/buck/parser/BuildTargetParserTest.java:264:  Avoid empty catch blocks

BUILD FAILED
  /data/buildslave/4/builders/smoke_build_bucktool/build/build.xml:382:
    Stopping build since PMD found 2 rule violations in the code
```

Test Plan: Run the `BuildTargetParserTest` from IntelliJ, and hope it works in this diff's smoke build.
NOTESTS status for tests with no output

Summary:
Buck's console output aggregates test results and summarizes them with a
single word, which by default is "PASS".  I find that's really confusing
as the test isn't really passing -- no test ran!  I find printing
"NOTESTS" is more informative, especially for the cases where it's not
obvious a test has been `@Ignore`'d.

(An alternative would be to not output any information for classes that
don't have any tests in them, but that didn't feel right -- it's better
to have a positive signal that nothing ran instead of absence-of-output
to indicate nothing ran.  The latter just looks and feels like a bug.)

Test Plan: Run with an empty test class!
Fix "buck test" output formatting

Summary: The new "NOTESTS" test status is 7 chars wide, so this diff
updates all buck test output to use 7-char-wide words as the first word.

Test Plan:
```
...
PASS    <100ms  1 Passed   0 Skipped   0 Failed   com.facebook.buck.java.ExternalJavacTest
PASS    <100ms  1 Passed   0 Skipped   0 Failed   com.facebook.buck.java.GenerateCodeCoverageReportStepTest
NOTESTS <100ms  0 Passed   0 Skipped   0 Failed   com.facebook.buck.java.GenruleDepsIntegrationTest
PASS    <100ms  1 Passed   0 Skipped   0 Failed   com.facebook.buck.java.InstrumentStepTest
PASS    <100ms  6 Passed   0 Skipped   0 Failed   com.facebook.buck.java.JarDirectoryStepTest
...
```
Fix dry-run test selection

Summary: Always use the `BuckBlockJUnit4ClassRunner` when using
`--dry-run`.  This means that all tests exercise the filtering code,
which is a neccessary part of the `--dry-run` reporting mechanism.

Test Plan:
Do a dry-run in fbandroid!

```
buck test --one-time-output --dry-run --all --serial emulator-5554 --include e2e+correctness+fb4a
```
Fix java.util.logging in Buck and use airlift facade

Summary:
This makes Buck logging work:

1) Use config/jul.properties to configure java.util.logging
2) Set up console logging
3) Customize the formatter to not be insane
4) Introduce the airlift facade for java.util.logging under
   com.facebook.buck.log
5) Fix up existing java.util.logging instances to use
   the airlift facade

Things that aren't done:

A) Making it so we can change log config from inside fbandroid / fbobjc / etc.

Test Plan:
Edited jul.properties, enabled logging at
FINEST level, killed buckd, restarted, confirmed
pretty logs.
Ensure that the android device has a writable temp directory.

Summary:
When installing software on an Android device, using the temp directory can be
essential. Check that the temp directory is writable.

Test Plan: buck test --all
Add support for multiple logging.properties config files

Summary:
This is a followup to D1405028. Previously, to set
log levels per-module or per-class, you could only do that
by editing config/logging.properties in the Buck repo.

With this diff, we now support three properties files:

1) $BUCK_DIRECTORY/config/logging.properties
2) $PROJECT_ROOT/.bucklogging.properties
3) $PROJECT_ROOT/.bucklogging.local.properties

and will concatenate together all existent files to configure
java.util.logging at runtime.

As a bonus, we watch these files for changes and reload logging
if any of them change while buckd is running.

Test Plan:
Created each of the above files. Confirmed in logs that
changes took effect when I run 'buck build buck'. Changed
while buckd was running, confirmed changes took effect next
time I ran buck.
Fix warnings identified by Eclipse.

Summary:
The majority of the fixes are:
* `{@link}` tags that were not updated with API changes.
* Closing unclosed resources.
* Missing `@Override` tags.

Test Plan:
Look in Eclipse: almost all of the yellow icons are gone.
Sandcastle builds.
Update "What makes Buck fast" doc

Summary:
Added sections on generalized ABI, dex merging, and graph enhancement.
I also broke out first-order into its own section.  We can add
first-order aapt there when it's ready.

The tone of the headers is very different from the existing ones.
Suggestions?

Test Plan: Looked at the page in soyweb.
Bump guava to version 17.

Summary: And fix any import and other code warnings flagged by ant and IJ.

Test Plan: buck test --all
Skip watchman integration tests when watchman is not available.

Summary:
When watchman is installed it should not report file change
events for existing files in the project. When watchman isn't
installed that behaviour should not be tested.

Test Plan:
1) Uninstall watchman
2) buck test --all
3) Check that WatchmanIntegrationTest reports 1 skipped test
Disable WatchmanIntegrationTest.

Summary: Builds have been red for a while now, and so not providing any signal.

Test Plan: buck test --all
Clear interrupted state after WatchmanWatcherTest

Summary:
This was being set and lingering around, breaking subsequent tests.
This was not a problem for "buck test" because it uses a separate
process for each test module, but "ant java-test" runs them all in the
same process.

Test Plan:
MoreFuturesTest passes.  I also added some logging to the start of it to
print the interrupted flag.  Without this diff it was true.  With it,
false.
Fix log spew from UnixFileSystemProvider in DirArtifactCacheTest.

Summary:
Logs would contain the following warning without this change:
```
[junit] Jul 02, 2014 12:07:52 PM com.facebook.buck.log.Logger warn
[junit] WARNING: Artifact store(d82cb7d741d952d9e187239c85a32c2dbdad44b4, /tmp/junit1512953101460783752/x) error
[junit] java.nio.file.FileAlreadyExistsException: /tmp/junit1512953101460783752/junit3761567524009369532/d82cb7d741d952d9e187239c85a32c2dbdad44b4
[junit]   at sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:422)
[junit]   at sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:262)
[junit]   at java.nio.file.Files.move(Files.java:1345)
[junit]   at com.facebook.buck.rules.DirArtifactCache.store(DirArtifactCache.java:86)
[junit]   at com.facebook.buck.rules.DirArtifactCacheTest.testCacheStoreOverwrite(DirArtifactCacheTest.java:117)
[junit]   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[junit]   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[junit]   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[junit]   at java.lang.reflect.Method.invoke(Method.java:606)
[junit]   at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
[junit]   at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
[junit]   at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
[junit]   at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
[junit]   at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
[junit]   at org.junit.rules.RunRules.evaluate(RunRules.java:20)
[junit]   at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
[junit]   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
[junit]   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
[junit]   at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
[junit]   at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
[junit]   at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
[junit]   at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
[junit]   at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
[junit]   at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
[junit]   at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:38)
[junit]   at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518)
[junit]   at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052)
[junit]   at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:879)
```

Test Plan: run DirArtifactCacheTest and notice no more log spew.
Create a buck.cmd_build documentation macro and use it

Test Plan: Looked at them and clicked them.
Revert guava version bump to 17.

Summary: This reverts commit d128f8cb2cb49a993eddf14c5889380321fae226.

Test Plan: revert-hammer