Store :tag, :branch, and :ref information separate from :revision

This commit fixes strange behavior where we treat refs, branches, and
tags as equals. In git land, they are. But in lockfile land, they are
not.