Remove low-level Rugged::Remote methods.

This drops `#connect`, `#connected?`, `#disconnect`, `#download` and
`#update_tips!` in favor of yet-to-be-implemented higher level methods.

Additionally, `#ls` now automatically handles connecting and
disconnecting the remote.
Implement `Remote#fetch` using `git_remote_fetch`.
Make `rugged__block_yield_splat` globally available.
Bring back the update_tips callback.
`rb_git_remote_ls` also has to call `git_remote_set_callbacks`.

This is to ensure that previously set callbacks get cleared correctly.
Only load the ivar content once.
Add the `transfer_progress` callback.
OCD.
Move and refactor the credential extraction code.
Credentials now respond to `#call` and just return themselves.
Add support for the credentials callback to Rugged::Remote methods.
Make argument checks more strict.
Refactor the `Repository#clone_at` code to reuse the Rugged::Remote implementation.
OCD.
Add SSH Agent Support.
Rename the Plaintext Credential to UserPassword.
Add a fetch helper method on Repository.
Refactor and simplify some of the credential extraction code.
Move push functionality from Repository to Remote.
Gracefully handle the case where no refspecs are passed to Remote#push.

We should try to fallback to whatever push refspecs are set in the remote,
or raise an error if no push refspecs can be found.