Work around broken PHP fwrite() on nonblocking pipes

Summary:
Fixes T4219. See comments. PHP returns `0` when writing to nonblocking pipes for both "everything is OK, but this pipe is blocked, so you should wait a little bit and try again" and "nothing is OK, this pipe is broken forever".

This was causing an busy loop in `ssh-exec`, where it would check if `stderr` was writable, see it was, try to write to it, get a 0-length write, interpret that as "wait a bit", wait for it to become writable (i.e., immediately!), try to write again, etc.

This was the best workaround I could come up with. I think it should be pretty safe; I'm not aware of any temporary condition or event which can make a pipe unwritable after a select says it's writable other than a write.

Test Plan: Ran `git pull` a bunch of times and `^C`'d it partway through. Previously I could leave a busy process eating a CPU on the server about 50% of the time, depending how good my timing was. I can no longer generate these processes.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T4219

Differential Revision: https://secure.phabricator.com/D7748
Add color output support for supported platforms on Windows

Modifies the `disableANSI` code to not outright reject Windows
but check the `TERM` environment variable in case it supports
ANSI colors. This applies to CygWin, PowerShell and integrated
terminals such as the ones in IntelliJ IDEs.

Tested manually in PowerShell, ConEmu and `cmd.exe`.

See: <https://github.com/facebook/libphutil/pull/30>

Reviewed by: epriestley