Change the API to compress and uncompress in place instead of allocating new arrays every time

This way, the time to allocate new arrays won't count into the compression and uncompression time, which should be fairer to very fast impls such as LZ4, Snappy or LZF. Moreover it makes garbage collection less likely and tests more reproducible.

I couldn't find the API to compress in place with LZF, maybe you can help?