Significantly improve performance in multimodule builds

I noticed that duplicate checking was taking a large percentage of our build time, and got significant performance benefits from:

* reading only the table of contents from zip files to get their class list (vs. the entire file)
* caching sha256 hashes for a file/resource pair so we don't need to re-extract the same bits.