Implement more thorough shell command line escaping on Windows

On Windows, when a command is specified as a list, it's executed via a
batch file. Previously, the shell escaping being done in the process
was quite minimal (only pipes were being escaped), and not entirely
correct (for example, an argument of 'a | b' would get escaped to
'"a ^| b"', which is wrong, since the shell ignores carets inside quotes.

This commit expands the escaping logic to cover all shell special
characters that I know of. For compatibility I kept the exception
that lone pipes are not escaped (although I'd rather I hadn't).

I expanded the test for the embedded pipe symbol into a more generic
special character test, and made it no longer Win32-only, since on any
platform it doesn't hurt to check that special characters in arguments
are correctly passed through.
Use win32_batch_quote in shell_quote
Merge SpecLad/buildbot:win32-shell-escape (PR #1095)

+autopep8
+add r prefix to punctuation string