Use fwrite to print whatever the subcommand wrote

Subcommands can write things like UTF-16, which some terminals can
understand.  printf() will interpret the null bytes as the end of the
string.

In particular, MSVC's assert() will print wide characters by default,
and I can't find a way to disable it, leading to clang assertion
failures looking like:
  FAILED: ...clang.exe ...
  Aninja: build stopped: subcommand failed.

With this fix, I get the desired:
  FAILED: ...clang.exe ...
  Assertion failed: SymbolMap...
  ninja: build stopped: subcommand failed.
Merge pull request #610 from rnk/wstr

Use fwrite to print whatever the subcommand wrote
Improve error message for duplicate rules and unknown pools.

Also add more tests for invalid manifests. According to gcov, these invalid
inputs weren't tested before.
Mention pools in the discussion of ninja's toplevel declarations.
Fix murmur hash implementations to work on strict alignment
architectures like OpenBSD/mips64el and OpenBSD/hppa64.
Merge pull request #615 from mdempsky/strict-murmur

Fix murmur hash implementations to work on strict alignment architectures
Add a 'recompact' tool, which forces recompaction of the build and deps logs.

This is useful for performance comparisons between two build directories.
Introducing tool 'deps' dumping ninja deps log entries
Merge pull request #611 from nico/testparse

Improve error message for duplicate rules and unknown pools.
Merge pull request #614 from nico/pooldoc

Mention pools in the discussion of ninja's toplevel declarations.
Merge pull request #616 from nico/recompact

Add a 'recompact' tool, which forces recompaction of the build and deps ...
Reuse ManifestParser::Load() in ManifestParser::ParseFileInclude().

ParseFileInclude() was doing the work that Load() was doing. Instead, just
make it call Load().

Also, remove a FIXME about using ReadPath() in ParseFileInclude() -- it's
already being used. (The FIXME was added in the same commit that added the
call to ReadPath() -- 8a0c96075786c19 -- it probably should've been deleted
before that commit.)

Also, remove a `contents.resize(contents.size() + 10);`. It's not clear what
it's for, but if it was important then ManifestParser::ParseFileInclude()
would have needed that call too, and it didn't have it.

No intended behavior change.
Let the ".ninja parse" metric include the time to read the toplevel ninja file.

Loads of included ninja files were covered by the ".ninja parse" in Parse()
further up the stack from the toplevel file, but the load of the toplevel
file wasn't counted. Fix that.
Add back contents.resize(), but with a comment and just 1 instead of 10.
Merge pull request #621 from nico/ninjaload

Reuse ManifestParser::Load() in ManifestParser::ParseFileInclude().
Add test for a manifest ending in the middle of a keyword.
Merge pull request #622 from nico/test

Add test for a manifest ending in the middle of a keyword.
Fix diagnostic formatting regression caused by adaa91a33eb2cf23b88.

Ninja regressed to include a location for every file on the include stack for
nested diagnostics, i.e. it would print:

  input:1: include.ninja:1: expected path

Fix this so that it prints only the current file location, like it used to:

  include.ninja:1: expected path

Also add a test for this.
Merge pull request #623 from nico/fix

Fix diagnostic formatting regression caused by adaa91a33eb2cf23b88.
Removing a redundant stat() call with 'deps' and 'restat = 1'