Implement opportunisitc ref updates

In 1.8.4, git introduced the concept of opportunistic remote-tracking branch updates, which mean that

    git fetch origin master

will attempt to match whatever was matched by `master` and perform the update with the configured refspecs. This introduces a difference between the active refspecs for a particular fetch and the passive/base refspecs which are configured for a remote.

In order to match this behaviour we need to introduce this distinction in our code as well. Thus, `git_remote_download` and `git_remote_fetch` now let you pass in a list of active refspecs which will form the active list (equivalent to the refspecs passed to `git fetch` on the command-line).

This fixes #2113