Parse Powershell output on standard error

Summary: Resolves T5976.  So when Powershell thinks it doesn't have an output terminal, it will automatically encode all output to standard error in a terrible CLIXML format.  No amount of command-line options will prevent this from occurring (I've tried).  You also can't wrap the command on the Windows side of things, because in order to do any processing on that level, you'd need to execute Powershell (which would in turn encode it again), or output all standard error to a text file and then `type` it from Batch (which would lose the ability to stream the standard error to Harbormaster).

Test Plan: Direct your anger at Microsoft for writing such terrible software and then run the unit tests.

Reviewers: #blessed_reviewers, epriestley

Subscribers: webframp, epriestley, Korvin

Maniphest Tasks: T5976

Differential Revision: https://secure.phabricator.com/D10363
Implement escaping logic for Windows Command Prompt and Bash in PhutilCommandString

Summary: Ref T2015.  This adds support for explicitly escaping commands for the Windows Command Prompt or Bash in PhutilCommandString.

Test Plan: Tested as part of a diff (not yet submitted) to support different shells in Harbormaster / Drydock.

Reviewers: #blessed_reviewers, epriestley

Subscribers: epriestley, Korvin

Maniphest Tasks: T2015

Differential Revision: https://secure.phabricator.com/D10555