With the 'smart' protocol, the loader tells the remote what head it
already has, which allows remotes not to include them or their
(transitive) ancestors in packfiles.
However, remotes can cache packfiles, and send many objects we do not
need, which wastes a lot of time in `*_missing()` RPC calls to the
storage.
This new graph traversal goes through all objects in the packfiles we
received, and computes which objects are ancestors of refs we already
have (assuming all objects in the path are in the packfile).