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.

Putting `table` on the prototype chain hurts readability, as follows:

1. It is shared by all Crc32 instances, as `this.table`.
2. If someone in the future ever wants to "patch" the table for a specific Crc32 instance, they will think, hey, let's do `this.table.xxx = yyy;`.
3. However, what is NOT immediately obvious is that it also affects the table of all other Crc32 instances (not everyone knows that objects on a prototype are shared and not copied by all instances of the "class" in JS).

By using a local variable instead, this thought can never occur, because it is immediately obvious that the variable is shared. I suggest to store the table in a local variable called `CRC32_TABLE` (or whatever you find more appropriate).