replace asyncio.gather with a stable wrapper

Summary:
The `asyncio.gather` function kicks off tasks in random order. That
means our modules get fetched in a random order, which isn't great. (We
went through all that trouble to allow ordered imports, after all.)
`stable_gather` is a small wrapper function around `gather` that
preserves the order of its arguments.

Test Plan:
Run a sync in the peru repo and confirm that the fetches happen in
alphabetical order. Turn our imports into a YAML list and confirm that
the fetches happen in list order.

Reviewers: sean

Differential Revision: https://phabricator.buildinspace.com/D99