Horde: slow transfer speed of large artifact files

Took more finagling than expected, but seeing initial 3x to 10x speed up after refactoring the way extraction target files are opened for writing.

Will let this stew for a couple of days to collect more data before I polish it up into a PR.

Reading block "Sparkle Compile Win64":"Compiled Binaries" from temp storage (artifact: 6811319e3617c52a5b91acac 'sparkle-compile-win64' (step-output), ns: horde-artifacts, ref: step-output/sparkle-main/65160/sparkle-compile-win64/6811319e3617c52a5b91acac, local: D:\h\sparkle\Sync\Engine\Saved\BuildGraph\Sparkle Compile Win64\Manifest-Compiled Binaries.xml, blockdir: block-Compiled Binaries) Using 16 read tasks, 16 decode tasks, 16 write tasks Written 3 files (150.6mb, 39.8mb/s) Written 4 files (352.2mb, 0.5mb/s) Written 4 files (801.5mb, 111.1mb/s) Written 4 files (1583.5mb, 147.5mb/s) Written 20 files (2391.9mb, 165.6mb/s) Written 20 files (2876.8mb, 98.4mb/s) Written 22 files (2891.5mb, 98.2mb/s) Elapsed: 30s, bundle.packet_cache.hits: 424, bundle.packet_cache.misses: 69, bundle.bundle_cache.hits: 69, bundle.bundle_cache.misses: 2, backend.http.wall_time_secs: 0, backend.http.num_bytes: 0, bundle.packet_reader.num_bytes_read: 0, bundle.packet_reader.num_encoded_bytes_read: 0, bundle.packet_reader.num_decoded_bytes_read: 0