Add .buckconfig project options for workspace_and_projects and with_tests

Summary:
This allows repositories to opt in to generating workspaces
with projects and including tests in projects by default.

Test Plan:
Edited .buckconfig to set [project] section
workspace_and_projects = true and with_tests = true. Ran 'buck
project', confirmed Xcode workspaces including tests were generated.

Repeated removing config entries, confirmed Xcode workspaces including
tests were not generated.
Fix ExternalJavacIntegrationTest.

Summary:
Earlier, we were replacing the entire environment with just one variable. The
CI setup changed recently in such a way that the standard environment doesn't
have python/java/etc in the $PATH. This fixes that by appending the new value
to the existing environment.

Test Plan: sandcastle - ExternalJavacIntegrationTest passes
Downgrade gen aidl message from error to warning ...

Summary: ... which is what it was meant to be.

Test Plan:
buck build messenger. Notice that gen aidl warning doesn't mess up the
super console.
Log shell step's stderr output as warning and not severe.

Summary: Super console no longer freezes, and you still see the shell step output.

Test Plan:
Build an android app with a ndk_rule that throws warnings, notice that
the superconsole no longer freezes and the ndk_rule output still shows up.
Add a Level param to ThrowableConsoleEvent.
Add Chrome tracing to buck launcher main()

Test Plan:
Ran 'buck project', confirmed trace was written to
buck-out/log/traces/launch.[uuid].trace and symlink existed. Opened in
chrome://tracing in Chrome, confirmed timestamps made sense and
matched build.trace.
Add Chrome tracing to buck_project.py

Test Plan:
Ran 'buck project', confirmed trace was written to
buck-out/log/traces/launch.trace. Opened trace in chrome://tracing in
Chrome, confirmed timestamps made sense and matched build.trace.
Add Chrome tracing to buck_repo.py

Test Plan:
Ran 'buck project', confirmed trace was written to
buck-out/log/traces/launch.trace. Opened trace in chrome://tracing in
Chrome, confirmed timestamps made sense and matched build.trace.
Clean up old launch tracing logs

Summary:
ChromeTraceBuildListener cleans up old logs, so the launcher
should as well.

Test Plan:
Ran:

  for i in `seq 1 30`; do touch buck-out/log/traces/launch.$i.trace; sleep 1; done
  buck

Confirmed old logs were removed.
Enforce Eclipse warnings by using ecj as a compiler.

Summary:
Update the Ant build to use the Eclipse Compiler for Java (ecj) with strict
checks enabled so that we can catch issues at build time, such as missing
`@Override` tags. Up until now, I have been manually fixing these errors as
I discover them when I load newer versions of Buck in Eclipse (most Buck
team members use IntelliJ and are unaware of these violations). It is finally
time to replace my manual labor with a computer.

The set of checks performed by ecj in our build are listed in
`third-party/java/eclipse/org.eclipse.jdt.core.prefs`. This is only a subset of
the available options we could configure, as the full list is at
http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fjdt%2Fcore%2FJavaCore.html.

My immediate goal in this diff is to curtail my current manual labor. As such,
it was more straightforward to hook ecj into Buck's Ant build than to introduce
the option of building with ecj in Buck itself. Admittedly, this makes a bit of
a mess in `build.xml`, but `build.xml` is already pretty lousy to begin with.

Giving Buck users the option to build with ecj and their own ecj configuration
would be a good thing to do in the future. In particular, if we could rely on Buck
to use ecj when building itself, then we could stop running ecj as part of Ant,
which would simplify `build.xml` considerably.

The changes to `build.xml` in this diff require users to upgrade to Ant 1.8 or later.
See the docs on `compilerclasspath` in http://ant.apache.org/manual/Tasks/javac.html.

The biggest change in this diff is to the `compile` target in `build.xml`. Specifically, `compile`'s
lone `<javac>` task is now split into three `<javac>` tasks:

* The first uses ecj to compile the dependencies of `//src/com/facebook/buck/apple/xcode/xcconfig:xcconfig`.
* The second uses javac to compile `//src/com/facebook/buck/apple/xcode/xcconfig:xcconfig`.
* The third uses ecj to compile the rest of the `src/` directory.

We prefer to use ecj for its strict compilation settings, but that is not possible when compiling
`//src/com/facebook/buck/apple/xcode/xcconfig:xcconfig` because it contains generated code
that is full of warnings and is not within our control to fix. This diff also creates an
Ant macro for compiling with ecj (aptly named `<ecj>`) in hopes that we can convert more of
the `<javac>` tasks in our `build.xml` to use ecj. In particular, converting
`<target name="compile-tests">` to use `<ecj>` will be done in a follow-up diff.

Additional notes on changes that needed to be part of this diff:

`jdtCompilerAdapter.jar` was taken from the `org.eclipse.jdt.core_3.9.2.v20140114-1555.jar`
file that is already in the repository. According to the Eclipse docs, extracting
this file is required to use ecj from Ant:
http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-ant_javac_adapter.htm

`<compilerarg value="-implicit:class" />` was removed from `build.xml`, which was
originally added when neo4j support was added to Buck. neo4j was later removed for
licensing reasons, so this seems safe to remove from `build.xml`.

Test Plan:
Sandcastle builds.
Introduce Eclipse errors, such as a missing `@Override` tag and try to rebuild with Ant;
verify that this fails the build.
Easy: Remove main target graph from WorkspaceAndProjectGenerator

Summary:
I'm adding support for multiple test targets in a workspace.

When doing so, I noticed the main target graph was totally unused in
WorkspaceAndProjectGenerator; we only used it to do a (target -> rule)
lookup in one location.

This diff removes it and passes in the rule directly.

Test Plan: ant test -Dtest.class=ProjectIntegrationTest
Remove test rule PartialGraph from WorkspaceAndProjectGenerator

Summary:
The only place where WorkspaceAndProjectGenerator used the
test rule PartialGraph was to build the multimap of (source rule ->
[test rule, test rule 2, ...]).

This diff moves the logic to build this map into AppleBuildRules and
uses it from ProjectCommand. I then removed the test rule PartialGraph
from WorkspaceAndProjectGenerator.

Test Plan: ant test -Dtest.class=ProjectIntegrationTest
Make SchemeGenerator primary rule optional

Summary:
We'd like to make Xcode workspaces which have schemes that
contain no Launch or Profile actions, but only a set of Test actions.

This makes SchemeGenerator's primary rule (used for the Launch and Profile
actions) optional, and adds a test to confirm the desired behavior when
the primary rule is not present.

Test Plan: ant test -Dtest.class=SchemeGeneratorTest
Make 'src_target' in xcode_workspace_config optional

Summary:
We'd like to support Xcode workspaces with multiple
test actions and no actual launch / profile actions.

This diff makes the 'src_target' in xcode_workspace_config optional.

However, we previously depended on that for the name of the workspace, so
I added an optional 'workspace_name' parameter, which can be set whether
or not 'src_target' is present.

If it's present, we use it as the name of the workspace, and if not,
we fall back to the short name of 'src_target'. (If that's also not present,
we raise a HumanReadableException).

Test Plan: ant test -Dtest.class=ProjectIntegrationTest
Add @Nullable annotations to Parcelable and Parser.

Test Plan: buck test --all
Fix linting errors. No logical changes.

Summary: The build was failing because of lint errors. Fix those.

Test Plan: ant pre-checkin
ALlow ProcessExecutor to expect stderr or stdout

Test Plan: Unit tests
Move construction of the ActionGraph to the TargetGraph.

Summary:
This more accurately models the relationship between the two, and (handily)
starts to reduce the complexity of the Parser.

Test Plan: buck test --all
Support additional test rules in WorkspaceAndProjectGenerator

Summary:
Previously, WorkspaceAndProjectGenerator only told
SchemeGenerator to generate tests for dependencies of the
`src_target` in `xcode_workspace_config`.

We want to support workspaces with multiple tests (and possibly
no `src_target`), so this diff adds the ability to pass
extra test rules down into WorkspaceAndProjectGenerator.

Test Plan:
In a subsequent diff, created an xcode_workspace_config by
hand with extra test rules. Confirmed the generated scheme included
all the test rules.
Add extra_tests to xcode_workspace_config

Summary:
Support an optional `extra_tests` field in `xcode_workspace_config`. If
present, we pass down the extra test rules to the workspace and scheme
generator, which will add them and their dependencies.

Test Plan:
Created an xcode_workspace_config rule by hand with
multiple test targets extra_tests and no src_target. Ran
`buck project --workspace-and-projects --with-tests //Path/To:workspace`.

Confirmed generated workspace included TestActions for each of the tests,
and that the tests and their dependencies were marked as `buildForTesting` and
not `buildForRunning`.