Introduce a checksum file cache service
This service is responsible for caching the checksums computed from
local file system. Because it's also used for dependency verification
writing and checking, this cache uses the existing infrastructure which
makes sure that if a file is updated locally, we expire the entry in
the cache.
This is done because there are lots of places in the code where we
used the legacy `HashUtil` class, which has no caching whatsoever.
It's, however, quite common to have a build which generates sha1
checksums multiple times for the same file. For example, during
publication.