Move `Repository#push` to `Remote#push` and align it with `Remote#fetch`.

`Remote#push` now also takes an optional `options` hash that can
contain the credential or credential hash to use for pushing.

`Repository#push` forwards to `Remote#push`.
Don't special case the handling of errors returned by git_push_finish.
Support custom reflog message/signatures for `Remote#push` and `Remotde#fetch`.