Introduce RuleKeyBuilderFactory so that all RuleKeys can be seeded with common data.

Summary:
Ultimately, we need to be able to include build options from `.buckconfig` in the
computation of a `RuleKey`. (It would also be nice to be able to inject it for
testing purposes.)

Test Plan: Sandcastle builds.
Don't nowrap() empty lines.

Summary:
f4d0dca introduced the nowrap control codes, but it was applying them before
the output was checked for empty(). That meant that empty lines weren't empty
anymore, and a lot of blank space got printed in e.g. `buck test --all`. Moving
the nowrap avoids this problem.

Test Plan: `buck test --all` no longer prints a lot of junk.
Reset compressed size when combining JAR/ZIP archives.

Summary:
From https://github.com/facebook/buck/pull/16.

zlib does not always deflate a resource to the same compressed size as
the original input.  The input resource may have been compressed using
a different version of libz, or different compression settings.

Before adding each entry to the ZIP, clone the entry and reinitialize
the compressed field to -1 as is done by the more commonly used
`ZipEntry(String)` constructor.

This fixes a rare case where including a JAR in a `java_binary()` may
throw an error such as:

  invalid entry compressed size (expected 4271 but got 4275 bytes)

Test Plan: Sandcastle builds.
Add support for tab completion in bash.

Summary:
From https://github.com/facebook/buck/pull/54.

When the bash_completion script is loaded, the user
can use the tab key to automatically complete the name of the
`buck command`, or if there are multiple commands beginning with
the same letter(s) suggest commands to use.

Test Plan:
Install the completion script:

  $ ./scripts/bash_completion

Suggestion of all available commands:

  $ buck
  audit build cache clean install project targets test uninstall

Suggestion of available commands with given starting letter:

  $ buck c
  cache clean

Completion of command with given starting letter

  $ buck b

("b" is auto-completed to "build")
Strip '-Werror' from build.xml in the public version of Buck.

Summary:
From https://github.com/facebook/buck/pull/16.

This reportedly causes problems when building Buck with OpenJDK 7:
https://github.com/spearce/buck/commit/243470c3c124af0da67148e3fa6e3efcf440d597.

Admittedly, we do not officially support the OpenJDK, but if it's not
hard to support it, then we should at least try.

Test Plan: Ran `./opensource/create_codebase --local` and verified the scrubbing worked.
genrule() should fail if any command fails.

Summary:
From https://github.com/facebook/buck/pull/16.

If a genrule is a complex sequence of shell commands the rule
should fail if any of the commands fails and its exit status was
not examined.

Fixes https://github.com/facebook/buck/issues/21

Test Plan: Sandcastle builds.