Implement remote callbacks

The callbacks get set on the Remote object and are called whenever libgit2 calls us. There is a layer inside the Remote object that converts the libgit2 data into something more manageable for python.

When we can change what Remote.fetch() returns, I think we should return a TransferProgress as well.

This fixes #274.