git: add 'refspec' argument

This argument may be used to fetch additional refs beyond the default refs/heads/* and refs/tags/*.
For example, useful to check out a GitHub pull request or Gerrit patch set.
Showing my ignorance of git's more advanced features here, is there a reason all of these fetch options are separate?  Your restructuring of the code makes it more obvious how similar they are.  I wonder if the code can combine them into fewer commands (merging the refspecs together for instance, or adding the --tags parameter to one of the fetch operations).