Support optionally running Android tests
Added 'Performance Tuning Your Builds' article to documentation.

Summary: Document performance tuning

Test Plan: Ran soy locally.
Add TravisCI support.

Summary:
Add TravisCI support.

This makes it so test status shows up in the README.md and on pull requests.

We use TravisCI for xctool as well.
Specify --no-optimize to dx for APK debug builds.

Test Plan: Sandcastle builds.
In BuildRuleResolver, assert that a rule is added only once.

Summary: This seems to have uncovered a bug in AndroidBinaryRuleTest.

Test Plan: Sandcastle builds.
Integration test to verify all tests are run on the same thread under @RunWith.

Summary:
Updated `DelegateRunnerWithTimeout` so that it maintains the default behavior of
JUnit where all tests are run on the same thread. We observed some test cases in
the wild that relied on this behavior. Specifically, Robolectric tests rely on this
due to a check in `org.robolectric.shadows.ShadowLooper`.

Test Plan:
Add a test to the `RunWithDefaultTimeoutIntegrationTest` test case to exercise the fix.
Made `executor` an instance rather than a `DelegateRunnerWithTimeout` field and verified
that `RunWithDefaultTimeoutIntegrationTest#testAllTestsForRunWithAreRunOnTheSameThread()`
failed.
When running javac, print out the number of errors and warnings.

Summary:
When trying to fix a java_library with a lot of errors, it is helpful
to see the error count as you go along so you can tell if you are making
progress or not.

Test Plan: Built a failing java_library and verify that the message appears.
Add getFileSize() and writeLinesToPath() to ProjectFilesystem.

Test Plan: Sandcastle builds.
Fix a cache corruption bug caused by including a rule's output on its classpath.

Summary:
Apparently, a `java_library` was including its output JAR on the classpath when
building itself. This means that removing `srcs` from a `java_library` and then rebuilding
the rule would still succeed if the output JAR was still around from the previous build.
This would explain some rebuild issues that we have received anecdotal reports of,
but have not been able to reproduce.

This diff solves the bug by fixing `DefaultJavaLibraryRule.getDeclaredClasspathEntries()`
so that its return value matches that which is required by its Javadoc:

```
/**
 * @return The set of entries to pass to {@code javac}'s {@code -classpath} flag in order to
 *     compile the {@code srcs} associated with this rule.  This set only contains the classpath
 *     entries for those rules that are declared as direct dependencies of this rule.
 */
public ImmutableSetMultimap<JavaLibraryRule, String> getDeclaredClasspathEntries();
```

Test Plan:
Added an integration test to make sure changing the set of files in a java_library's srcs
causes a rebuild.
Added a unit test to make sure the `-classpath` argument passed to `javac` does not include
the output JAR of the `java_library` rule being built.
Add support for --force-jumbo in DxStep.

Summary: We need this for the upcoming predex diff.

Test Plan: Comprehensive unit test for DxStep: DxStepTest.
Support alternative executable for running `dx`.

Summary:
You can use `$BUCK_EXTRA_JAVA_ARGS` to specify a `-Dbuck.dx` VM arg
to `java` when running Buck to specify a path to a custom `dx` executable.
Introduce optional flavor projection to BuildTarget.

Summary:
For now, this will be reserved for synthetic build rules that
are inserted via graph-enhancement.

Test Plan: Sandcastle builds.
Encapsulate posting to BuckEventBus in ExecutionContext...

Summary:
...where it makes sense. There's still a bunch of direct calls to
`BuckEventBus.post`, but only where `ExecutionContext` is not available.
Perhaps, I can send out a similar diff for `BuildContext`.

Test Plan: ant test
Add a class that can generate a subset of buck.py and populate constructor args reflectively.

Summary:
As part of the work to add a plugin mechanism, we need a way of allowing new extensions to declare
what arguments and dependencies they have without needing to modify buck.py. The
 BuildableArgInspector provides that.

Test Plan: buck test --all
Add <?> to silence raw type warning in Eclipse.

Test Plan: Sandcastle builds.
Introduce AccumulateClassNames rule to produce the list of .class files in a Java artifact.

Summary: This is needed for the upcoming pre-dexing diff.

Test Plan: Sandcastle builds.
Replace some casts from BuildRule to Buildable with rule.getBuildable().

Summary:
I think that we needed these casts at one time, but now they are no
longer appropriate. Especially since more of our implementations of
`BuildRule` do not actually implement `Buildable`.

Test Plan: Sandcastle builds.
Introduce ConditionalStep.

Summary: This is needed for the upcoming predex work.

Test Plan: Sandcastle builds.
Add a BUCK_COLOR env var, fixing SuperConsole in buckd.

Summary:
buckd can't tell whether the caller is talking to a tty or not, so we need to
tell it in order to enable SuperConsole output. Add BUCK_COLOR, which
(extending the existing color config) takes values of true/always, false/never,
or auto. Copy the VerbosityParser hack to get this option early in startup.
Modify the buck starter script to pass this value to the nailgun server.

Thoughts on renaming the "color" config to "fancy" or something?

Test Plan: buckd output is now Super by default. Confirm that "never" overrides the default.
buck.py more permissive symlinking.

Summary:
f0dedaec09331f73b3970658344cf8f3cb37a83b introduced a symlink aware walk aimed
at preventing recursively symlink loops; however, it was too restrictive in
that it pruned all symlinks that it has visited before, not only those that
would result in recursive symlinks. This breaks legitimate uses of symlinking
to siblings and cousin directories.

This diff adds a second test before pruning the symlink: not only must the
target directory be one already visited, but it must also be a direct ancestor
of the current directory.

Test Plan:
Trigger the traversal code by using recursive `glob` and `buck test --all` on
directories with the following configurations:

Test that siblings are okay (`b` and `c` are both traversed):

  a/
    b/
    c -> b

Test that ancestors are still rejected (`c` is not traversed):

  a/
    b/
      c/ -> ../b