Update list of existing directories in FakeProjectFilesystem when you add a file.

Test Plan: Added a unit test.
Change BUCK file python parser to model includes as modules.

Summary:
Previously, include_defs worked by running execfile with the current
context's globals dict to pull the included files globals in.
However, doing includes this way caused some weird behavior:
1) If a build file included two different def files, one after another,
the globals from the first one would be accessible from the context of
the second.
2) Since all include files shared a globals dict with the build file,
they could all overwrite each other's variables, meaning the behavior
of the import was dependent on the import order.
3) Due to how we tried to prepare default gloabls dict for the default
includes, the function closures in the default defs we parsed captured
the original the globals dict.  That meant, that even though we tried
to inject a new globals dict into the includes via execfile, the
functions themselves still maintained references to the original globals
dict (issue #182 on github).  This caused broken behavior when the
functions declared in imports did imports themselves.

This diff changes our include behavior to use modules instead.  When
an include_def is seen, we compile the code in the def into a new
module, using it's own globals dict (seeded with default functions,
etc), then pull the imported include's globals into the callers globals.
As part of this change, we also cache the executed module for each
include, so we only ever execute it once (before, for non-default
includes, we'd execfile the same include everytime we used it).

Fixes #182

Test Plan:
Included some tests for basic sanity, one of which was a test for
https://github.com/facebook/buck/issues/182.
Check if the asset directory exists, before walking down the file system.

Test Plan: buck test --all
Add a utility method to ProjectFilesystem to include additional files in zip files.

Summary:
I will use this in a subsequent diff to include additional metadata about cache
artifacts in the zip files.

Test Plan: unit tests.
remote_file: indicate to Buck we have an output file, and support source jars.

Summary:
This addresses two problems:

* The initial version of this rule didn't announce to Buck it was exporting a file.
* The file name convention only worked for "jar" types.

With this change, we support source and javadoc jars as well.

Test Plan: Still working on the diff the introduces "buck fetch", which contains a test for this.
Bump args4j to the latest release.

Summary:
We're lagging behind the latest release and didn't include the source jar, so
debugging command line parsing problems is tricky.

Test Plan: buck test --all
Fix `CacheCommand` default constructor.

Summary:
af0c188 made our `ArtifactCache` implementations take an instance
of `FileHashCache` to be constructed, which required threading
through a copy the file cache into `CacheCommand`.  That change did
this via adding a new `FileHashCache` parameter to it's constructor
which violates how `Command` subclasses work: they should only take
a single `CommandRunnerParams` argument.

This diff fixes that by threading the `FileHashCache` reference in
the `CommandRunnerParams` object.

Test Plan:
Added a test to verify that `Command` constructors take single arg
or type `CommandRunnerParams`.
Include build uuid and timestamp in every cache artifact.

Summary:
This will be useful to debug some of the caching issues, by helping figure out
which buck run created an artifact.

Test Plan:
In a sample project with cache mode set to dir,
```
$ buck build app
$ buck clean
$ buck build app
$ cat buck-out/log/cache_artifact.txt (verify contents include the build id and time).
$ buck clean
$ buck build app
$ cat buck-out/log/cache_artifact.txt (verify contents are the same).
```
Move all third party libraries into third-party.

Summary:
We started with libraries in `lib`, then moved to using
`third-party/java` but never moved the existing libraries. The
inconsistency finally made me snap.

Test Plan: buck test --all
Add lex/yacc support for C/C++ rules.

Summary:
This diff adds support for `lex_srcs` and `yacc_srcs` parameters
to `cxx_binary` and `cxx_library` rules.  When lex/yacc sources
are passed in these parameters, the corresponding tools will
automatically get run on them and their generated sources will
get compiled into the binary/library the rule generates.

Test Plan: included tests
Add a C/C++ Python Extension description.

Summary:
This diff adds a description specialized for building python C/C++
extensions used by python rules.  While similar under the hood to
C/C++ library rules, C/C++ python extension descriptions contain
additional UI elements to set the module path, implicitly adds a
dependency on the C/C++ python library, and names its extension
after the rule shortname (e.g. <name>.so, rather than lib<name>.so
for standard shared library builds).

Test Plan: included tests
Remove CxxHeader rule.

Summary:
The CxxHeader rules were used to track changes to a C/C++ descriptions
header files, and a dependents that transitively depended on that
description would have it's compile rules depend on the CxxHeader rule
so that header file changes would trigger recompiles.  This diff removes
the middleman and just has each compile rule grab a full map of it's
transitive includes, allowing a future change where the compile rule
can fixup it's error output so that we show the real header file paths
that back the symlink tree view we setup.

Test Plan: buck test --all
Remove BuildRuleResolver#addToIndex(BuildTarget, BuildRule).

Summary:
BuildRuleResolver#addToIndex(BuildTarget, BuildRule) is always only
called with the build rule's target. This removes it and leaves only
addToIndex(BuildRule).

Test Plan: CI
TestResultSummary: add equals/hashCode imlementations.

Summary:
This is useful for checking for expected test results in unittests
verifying test runner support.

Test Plan: added small test case
Add cxx_test description.

Summary:
Adds a C/C++ test description type, which is essentially a C/C++
binary with a implicit dep on some testing library depending on
the test type used, which is by default gtest, the only test type
currently supported.

Test Plan:
Included some tests.
Support C/C++ boost framework in `cxx_test`.

Summary:
This adds support for boost's testing framework in the cxx_test
description
(http://www.boost.org/doc/libs/1_56_0/libs/test/doc/html/index.html).

Test Plan:
- included tests
- ran a few thrift tests
Document that exported_deps is a valid attribute for android_library.

Summary: Closes issue #194.

Test Plan: Visual inspection. AKA: reading.
Correct the docs stating the default version of java that buck targets.

Summary: Closes issue #147.

Test Plan: I CAN READ, TREBECK!
Implement monotonic_time_nanos for cygwin.

Summary: This is essentially the same as for Windows, but with a little cygwin quirkiness.

Test Plan: Run buck under cygwin. Observe that the function is defined.
Adding @Nullable annotations.

Summary:
Adding `@Nullable` annotations and `Preconditions.checkNotNull()`, as appropriate.