newByteChannel calls zipfs.newFileChannel() rather than newByteChannel

This avoids the useTempFile problem - but would allow us to later
conditionally use the bytechannel for small writes.

Sadly this needed quite a bit of workarounds for bugs in Java's ZIPFS
Write initial file with newFileChannel to avoid duplicate zipentry
newInputStream proxies through to zipfs - bypasses newFileChannel

(and therefore does not write out existing ZIP entries to tempfiles)
Sparse file