remote: introduce git_remote_push()

This function, similar in style to git_remote_fetch(), performs all the
steps required for a push, with a similar interface.

The remote callbacks struct has learnt about the push callbacks, letting
us set the callbacks a single time instead of setting some in the remote
and some in the push operation.
push: move main test function to git_remote_push()

We have the step-by-step method in the initialization function as we
want to remove references based on the list of references which are
already there, and we can use the convenience function for testing the
main push.
remote: use configured push refspecs if none are given

If the user does not pass any refspecs to push, try to use those
configured via the configuration or via add_push().
Merge pull request #2608 from libgit2/cmn/remote-push

Provide a convenience function `git_remote_push()`