Improvements to git_transport extensibility

`git_remote_set_transport` now takes a transport factory function pointer and payload, rather than a live transport object. This means that callers no longer have to worry about the strange programming model of creating a transport object, then handing off its ownership to the `git_remote`. (This is especially strange since the signature of the method to create a `git_transport` requires that the caller have the owning remote already created!) It also means that the transport factory function pointer and payload can be duplicated with the rest of the remote's data in `git_remote_dup`.

`git_clone_options` now allows the caller to set a transport factory function pointer and payload, so that the transport used for the clone operation can be overridden by the caller. This was previously not possible with this function because the `git_remote` is created within the function rather than being passed in. We already have similar options for disabling SSH certificate verification, etc.

These are both breaking changes and are documented in the changelog.