Fix zip export

It was broken since 67587450e47fb0d9bd2753edc2a04c5b9f93951c;

* If zip command was not found, subprocess.Popen() will raise an
  exception and the fallback path will not be reached. The old code
  worked because os.system() will just return a non-zero return status.
* If zip command was found, the call will also fail because --out does
  not do what I probably thought it does!

That code was too smart, it took me a fair bit of hair pulling to realize that it was original creating an empty temporary file then redirecting `zip`’s output to it. This logic have been restored now, the only part I’m not sure about is the comment about opening the temporary file and closing it immediately for “security reasons”; do we really want to close it immediately or was that just to use `tempfile.mkstemp()`?