Overlap patch-generation/compression and upload

Doesn't matter much for small patch jobs -- upload will just spend all
its time waiting for generation/completion to produce a block -- but for
large ones it allows the (slow) compression to proceed at the same time
as the (slow) upload.

Also ties progress output to reading the source file rather than uploading
the chunks, since a final size isn't available.