Renames should be handled efficiently (fixes #3)

Attempt one.

Alternative version would be to check just for the files we are removing, which would get rid of the `WithHave`.

Ideally I'd like this global block cache thing come true, and have even better stuff happen automagically in `handleFile`.

Not sure if the `if len(file.Blocks) > 0` checks are necessary (probably not?), but just playing it safe.
I haven't looked super close at this one, but one thing struck me. Since you are moving the work out of the WithNeed loop, we are buffering all of the file objects that we need in memory. This could be hundreds of megs or even gigabytes for a large, new, folder and is probably worth trying hard to avoid. (Just terminating the loop after x items or y blocks, like we do in other places, and then doing another pass later is an easy and ugly way.)