Refactors sync to use asyncio more and many tests
The previous sync machinery design was very complicated due to treating the asynchronous coroutines as synchronous code. This rewrites the sync code to have the coroutines track the work instead.
In doing the rewrite several bugs were fixed also:
- versions in requirements.yml are now respected
- requirements.yml with different sources are now respected too
It also makes many test improvements:
- refactors Galaxy V2 sync tests to be bindings based
- adds may more tests