zip-reader: Read the whole central directory at .zip open time.
By reading the whole central directory when we open the .zip file, rather
than one entry at a time, we make it easier to get a list of entries and
make it available to the client. (This will be implemented in an upcoming
commit.)
This commit also fixes memory leaks in the error case in zip_member_open().
This commit also changes the usage model. Previously, if the caller opened
a single member more than once, all the members shared a single copy of
the member and read each other's data. Now, each caller that opens a
member gets a separate copy and a separate file pointer. Callers now need
to call zip_member_finish() when they're done with a member.
With this commit, the code only keeps an open FILE for a member if the
caller opened that member. Previously, it kept an open FILE for any
member that had been encountered.