snappy version 3 - work in progress

Complete simplified rewrite of snappy.
I thought about this some more too. However, it is somewhat confusing that you allocate the input string on the heap outside the worker and then have it deleted inside. Better stick to RAII and make the `AsyncWorker` object responsible for managing its own resources. Otherwise, again, if someone tries to reuse, say, your `CompressWorker` not expecting this it would lead to confusing double free errors.

So, make the worker constructors take a `node::Buffer` or the underlying `char *` and create the std::string there.

e.g. something like

```c++
CompressWorker(const char* input, int len, NanCallback *callback)
      : NanAsyncWorker(callback), input(input, len) {}
```