Change the BuildRuleType to a class rather than an enum.

Summary: Currently, all build rule types are enums. Convert to a class so that adding new types requires fewer changes.

Test Plan:
Added a new test class
buck test --all
Collecting javac options into a class of their own and passing that around.

Summary: A step towards spooling output directly to a jar: replace the JavacOptionsUtil with a concrete implementation of the command line switches.

Test Plan:
buck test --all
When running the steps for a test, include the build target for better logging.

Test Plan: Sandcastle builds.
Default array value to [] instead of None.

Test Plan: Sandcastle builds.
Remove some code from JavacInMemoryStep that was used only by Java 6.

Test Plan: Sandcastle builds
Update Cassandra initalization script; improve connection error messages.

Summary:
Update Cassandra initalization script to specify replication factor, and
improve Cassandra connection/schema error messages.

Test Plan:
Automated tests.  Changes were all motivated by failures encountered
during cluster setup.
Create an integration test harness.

Test Plan:
I have a diff stacked on top of this one with a test that provides
an example of how this test harness should be used.
Make it possible to disable colorization via .buckconfig.

Summary:
Now, specifying the following in .buckconfig will disable colorized output:

    [color]
      ui = false

It is helpful to be able to disable colorized output when running integration tests.

Much of this work was also modifying the code so that only one `Ansi` object is
created as part of Buck's execution and making sure it is threaded through all
of the places it needs to get to.

Test Plan:
Follow-up integration test relies on this.
Sandcastle builds.
First integration test.

Test Plan: Sandcastle builds.
Try to centralize stream writing around Console.

Test Plan: Sandcastle builds.
Change `buck clean` so that it does not delete files that IntelliJ is interested in.

Summary:
We do not want `buck clean` to delete files that IntelliJ indexes by default
because empirically, `buck clean` currently throws IntelliJ into a tizzy.

Test Plan:
Ran `buck clean`.
Verify that buck-out/bin and buck-out/gen were deleted
and that buck-out/annotation and buck-out/android still exist.
Add .settings to .gitignore.

Test Plan: Verify that my .settings directory no longer shows up when I run `git status`.
Add more utility methods to ProjectFilesystem.

Summary:
This will make it easier to route more filesystem accesses
through the ProjectFilesystem abstraction.

Test Plan: Sandcastle builds.
Added class overview for AaptStep.

Test Plan: Sandcastle builds.
When `--verbose 2` is passed to `buck test`, print when tests start and stop.

Summary: This is a temporary workaround to track down a runaway test in fbandroid.

Test Plan: Ran `buck test --all --verbose 2` and verified expected text was written to stderr.
[buck] Better error message if build-tools are not installed.

Summary:
On the latest update of the Android SDK tools, certain tools
were moved from ##platform-tools## to ##build-tools##, and some need
to be installed manually by the user.

Buck shows an error, but it was previously vague.
Remove some questionable caching logic from AndroidBinaryRule.

Test Plan: Sandcastle builds.
Fix ApkBuilderStep.getShortName() so it returns an executable command.

Test Plan: Sandcastle builds.
Make annotation params part of a java_library's RuleKey.

Test Plan: Sandcastle builds.
Make sure InputRule and ProjectConfigRule are idempotent.

Summary:
In particular, `build(BuildContext context)` should always return
the same `ListenableFuture` object.
Also cleaned up `InputRule.getRuleKey()`.

Test Plan: Sandcastle builds