Use the new `git_remote_dup` to simplify the code for `Remote#fetch`.
Allow passing a remote name to `Repo#fetch`
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`.