Merge upstream commit '2e646457' into master

* commit '2e646457':
  Document example dyndep use cases
  Document `dyndep` binding behavior and the dyndep file format
  query: load dyndep files for queried edges
  graph: load dyndep files
  clean: remove outputs specified by dyndep files
  clean: remove unnecessary Cleaner constructor variant
  Teach builder to load dyndep files when they are ready
  Teach RecomputeDirty to load dyndep files that are ready
  Teach DependencyScan to load a dyndep file
  Add a "dyndep" reserved binding to the manifest format
  Add a parser for a new "dyndep" file format
  Explicitly avoid repeat deps loading
  Make a Builder optionally available to Plan
  Factor out output edge ready check from Plan::NodeFinished
  Factor out edge marking logic from Plan::AddSubTarget
  Teach FakeCommandRunner to support multiple active commands
  Allow EdgeFinished and NodeFinished to fail with errors
  Assert precondition in BuildStatus::BuildEdgeStarted
  Factor out a base class of ManifestParser
  ManifestParser: Fix typo {expectd => expected}

This brings in the upstream dyndep feature into our ninja fork. The
majority of the conflicts were from our parallel manifest parser, as
that changed the Lexer and all of the BindingEnv classes, which required
some rewrites. Upstream shares a base parsing class between the
ManifestParser and DyndepParser, that doesn't make sense with our new
parser, so DyndepParser is the only user of the Parser base class.

Colin's validation nodes change also interacts with dyndeps, I pulled in
the new code from his github pull request.

Test: builtin ninja tests
Test: treehugger with updated prebuilt
Change-Id: I90b059d0c28a353d50e74efc9097cc39d88a5583