use a relative path for the README gif

Summary:
The absolute path makes other forks and branches point to the
buildinspace:master version of the gif. The relative path respects the
version of the gif in whatever repo we're looking at.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D108
factor out create_subprocess_with_handle()

Summary:
We're about to integrate build commands with the fancy display. We need
to split out the logic that grabs output from plugin subprocesses, so
that build commands can reuse it.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D104
turn Rule.do_build into a coroutine

Summary:
Build commands now run in parallel with fetches, so a long-running build
command won't block progress on the main thread. We still limit
ourselves to one build command at a time, to avoid thrashing the disk,
and so that we can safely forward build command output straight to the
console without interleaving.

To make this easy, we add a `get_printing_handle` to `BaseDisplay`. This
handle implements the interface of a regular display handle, but just
calls the display's `print` method instead of doing anything fancy. That
lets us share `create_subprocess_with_handle` between modules and rules
without any other changes.

Test Plan:
Added an integration test for fetch and build output that also
conveniently fails if the cache checks or locks are removed for either
rules or modules. (That causes the build or fetch to occur and print
multiple times, disrupting the output.)

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D105
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