Start implementing remotes with CFFI

This moves enough code into python with CFFI to pass the test_remotes
unit tests. There is no credentials support yet.

There is a small change in the return value of Remote.fetch() in that we
now return a TransferProgress object instead of extracting a few values
into a dictionary.
Remote: support credentials via CFFI

This lets the whole test suite pass, though there's still a callback or
two that's not tested but we should support.