Introduce credential support

Implement support for username/password and ssh keypair credentials. Add support for them in the Remote as well as `clone_repository()`. The parameters expect a callback, but the provided types already provide the right `__call__` interface.

There's a bit of sausage-making in this PR, with a bunch of code being removed in the middle, but I've kept it to show the process by which I arrived at this design.

Credentials implement two attributes, and the pygit2 code extracts the information from a tuple and passes it on to libgit2.