Implement basic local caching

Summary:
This diff implements a very basic local caching.
A generated target is copied to .falcon/cache/<hash> where <hash> is the hash of
the target.

When we build a target, we first check the cache and copy the file. If the entry
is not found in the cache, we build the rule.

Note: We currently don't have any eviction mechanism in the cache :-)

The next steps are:
- try in-memory caching (rocksdb?)
- eviction mechanisms
- heuristics for knowing what should be in cache (use git to detect files
  affected by branches?)

Test Plan:
Create a project with several branches, switch branch and build
several times and check that the targets are retrieved from cache.

Reviewers: NicolasDP

Reviewed By: NicolasDP

Differential Revision: http://91.121.199.76/D52