Cache entirely based upon URLs.

This includes and builds upon #282. Compared to it:

- More aggressively cache succesful downloads
- More aggressively clean up temp files
- No longer try to download the same URL twice, at the same time
- Fixed double-store bug in #282.
- NetCache is much smaller, and no longer requires a temp dir
- Fixed bug where hashes used in our filenames could contain slashes.
- Tests included.

Our Async file operations still do a poor job of signalling errors, but that's a different issue.

Closes #111.