Caching the contents of jars on disk from run-to-run

Here is a basic implementation of on-disk jar content caching from run-to-run. I've added the sha1 hash of the jar itself into the name of the unzip contents directory and the .jarName file. Also the .jarName file is created last (only after a successful unzip) and it is the existence of this file that is used to check whether to unzip or use a cache. So under most circumstances the assembly should be good even if the user aborts and restarts the build midway through.

Is this OK as-is, or would you like the caching to be conditional on a key? This change results in a very significant speedup on my setup.