GitDownloadStrategy: generalize has_tag? to has_ref?
GitDownloadStrategy: factor out checkout args
GitDownloadStrategy: reset after checkout during updates

Otherwise, if the local branch is behind the remote branch, or has
diverged, we will stage the wrong revision.
GitDownloadStrategy: force checkouts

Local changes to the cached repository should not cause fetch or install
to error out.