Teach Push._compute_other_refs() to use for-each-ref to dereference tags.

This is much faster than having the GitObject constructor dereference
each tag separately.
Compute new commits using SHA-1s rather than GitObjects.

Previously, GitObjects were created for *all* references in the
repository, which was quite expensive (mostly because of the git
invocation to determine the short name of the object).  Now we only
create GitObjects for new commits, which should be a much more
manageable number.
Merge branch 'cheaper-other-refs'

Speed up the computation of "other refs" (those unaffected by this
push) by resolving them to commits in the original for-each-ref
invocation (rather than peeling them individually) and not creating
GitObject instances to hold each one (avoiding another git invocation
to compute the short version of the object name).