Handle implicit dependencies - some refactoring - new tests

Summary:
I changed the way we compute dependencies. Now it first runs a stat on all the
nodes and then performs a DFS starting from the roots.
The hashes are computed on the fly by this algorithm. The complexity is now
O(N).

I implemented the parsing of depfiles on startup. If the depfile is not found,
the target is marked out of date even if its explicit inputs are up to date.

I added tests for depfiles and hashes.

Test Plan: Run the tests

Reviewers: NicolasDP

Reviewed By: NicolasDP

Differential Revision: http://91.121.199.76/D47