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.

Well, my example of moving code is not good enough. Actually we don't want codes outside of `Crc32` depends on `CRC32_TABLE`. But by declaring it as a local variable outside of `Crc32`, it is less obvious that other codes should not use it directly. If someone do that, static analysis tools will not complain until we move `CRC32_TABLE`, but it is a bit too late.

`Crc32.table` is more close to a "class static member", but we lose the ability of overriding the table in an instance of `Crc32` (e.g. by a Uint32Array, though this is probably a useless feature). In popular class-based languages, class static members can't be overriden, sometimes I feel this is inconvinient.