Add a fetch example.
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`.
Don't special case the handling of errors returned by git_push_finish.
Support custom reflog message/signatures for `Remote#push` and `Remotde#fetch`.