Provide a convenience function `git_remote_push()`

This function takes all the steps necessary to perform a push and does them for you. This is also an opportunity to provide a single callback structure instead of them being spread out between the structure and two different functions on the push object.

AFAICT basically all the bindings already provide this function themselves, so let's have an implementation in libgit2 directly.
It's not optional, but if you pass in an empty one, then nothing will be added to the push object. I'll need to check more closely what the different behaviours are, and which of the git behaviours makes more sense here.