use ProactorEventLoop on Windows
execute plugin processes as shell commands

Windows doesn't have anything like shebang lines. Instead, the shell
figures out what interpreter to use based on a file's extension. That
means plain (safe) exec won't work on Windows.
don't assume decoders have the buffer attribute
use pathlib when dealing with paths in tests

Summary:
Before this change, tons of our tests fail on Windows, because they
hardcode paths of the form "a/b/c". Then `os.walk` spits out "a\b\c" and
everything dies. Making real `Path`s out of all of these should solve
the compatibility issue.
add --catch to the unit tests
peru.bat and test.bat
unify newlines in subprocess output
unit tests for shared test code
stop hardcoding the temp root
stop using shell=True in tests
use pathlib for building file:// URIs
add __str__ for PrintableError
stop using TemporaryNamedFile

It looks like Windows takes an exclusive write lock on that file when
it's created. We want to be able to open temp files in a context manager
than cleans them up automatically, which is causing errors when the file
is opened again for actual writing. Easier to create a temporary
directory.
skip tests with build commands on Windows
skip testing the rsync plugin on Windows

The rsync plugin is written in bash, so it won't work properly on Windows.
A couple field validation tests also depended on rsync, but those can use
the git plugin instead.
update asyncio to the Python 3.4.2 version