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.

By the way, in JavaScript, the Module pattern is commonly used for creating self-contained modular code, for readability and maintainability. This could be applied to this example as follows:

```
var Crc32 = (function() {
    var table = ...; // "Private" static variable
    function Crc32() { ... } // Constructor, will be published below.
    Crc32.prototype.xxx = ... // Public instance method
    return Crc32;
})();
```

But as said before, it seems that the existing code base doesn't utilize this pattern, so I don't mind whether you apply it or not.