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