Worker improvement

1.  Use a single web worker for all deflating/inflating tasks in a ZipReader/ZipWriter, instead of one worker for one entry. This significantly reduces the overhead of creating web workers when processing zip file with many entries. However, users now must call `close()` when they done with ZipReader/ZipWriter, or the worker is leaked.

2.  Separate codecs (Inflater/Deflater) and worker codes, and allow pluggable DEFLATE implementations. Now zip.js can work with zlib-asm and pako.

3. Avoid copy ArrayBuffer's between workers and main thread.

4. Move crc32 into worker, further reduce main thread's load.

JS has no such concept of "class static member", I think a member on a instance's prototype is close. `Crc32.prototype.table` is a singleton belong to class Crc32 and is shared by all Crc32 instance, this is exactly what I want to express. A local variable outside Cr32 looks less cohesive to me.

For "private" member I usually prefix them with a underscore, however Crc32 itself is already sealed in the closure, I don't think it is necessary to make its members more "private".