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
setup.py

Summary:
Create a simple setup.py file from the instructions at
https://packaging.python.org/en/latest/distributing.html. The
`package_data` field doesn't seem to like directories, so we need to
walk the paths under `./peru/resources` to include everything.

Right now we're not including anything under third_party. Instead we
pull those in as dependencies from PyPI. Not sure if this is what we'll
do in the long term, but it's nice that it works.

Test Plan:
Ran `python3 setup.py install --user` and confirmed that peru works.
Then `cd tests; python3 -m unittest` to confirm that tests pass against
the installed version.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D125
create an Arch PKGBUILD

Summary:
Also including a little script that makes it easier to package your
local copy of the sources (instead of the default, cloning a new repo to
package).

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D126
use ProactorEventLoop on Windows

Summary:
The default event loop on Windows doesn't support subprocesses, so we
need to set this. Unfortunately the event loop is a global, and there's
a bit of a race condition to set it before anything tries to read it.
(In particular, instantiating an asyncio Lock or Semaphore grabs a
reference to the global loop.) We set it here at import time, which
works fine for now, but it makes me worry that some future code
(probably in tests) isn't going to import our `async` module, and will
run into bugs as a result. I'd love to have a better place to put this.

Reviewers: sean

Reviewed By: sean

Differential Revision: https://phabricator.buildinspace.com/D109
fix the plugin parallel count