This PR adds a new hasher strategy that calculates the hash based on all dependencies, transitively. Previously, we assumed backfill would be run on every dependency in dependency order. backfill would not calculate the hash of a package's internal dependencies, instead, it would be looking for a hash file in the internal cache of each dependency created by backfill on a previous run. That assumption made it hard to incrementally introduce backfill into a repo. Also, it is hard to know if the hash file is up to date.