Zip: improve reader and handle performance

This reduces the number of iterations over ZipEntries, and attempts to
calculate decompressed size based upon the sum of ZipEntry sizes
(instead of reading every byte from the file).

Fixes #11192.
ZipReader: add a couple of null and bounds checks
Merge pull request #796 from melissalinkert/zip-performance

Zip: improve reader and handle performance