Fixed potential read overflow when compressing due to hash computation.
Added block compressor/decompressor backend switch functions.

This allows to use other compression backends, such as LZ4:

/* compression backend for LZ4 */
static int lz4_backend_compress(int level, const void* input, int length,
                                void* output) {
  /* Level 1 is the fastest compression and generally useful for short data. */
  if (level == 1) {
    return LZ4_compressHC(input, output, length);
  }
  /* Level 2 is slightly slower but it gives better compression ratio. */
  else {
    return LZ4_compress(input, output, length);
  }
}

/* decompression backend for LZ4 */
static int lz4_backend_decompress(const void* input, int length, void* output,
                                  int maxout) {
  return LZ4_uncompress_unknownOutputSize(input, output, length, maxout);
  /* return LZ4_uncompress(input, output, maxout); */
}

...
fastlzlibSetCompress(stream, lz4_backend_compress);
fastlzlibSetDecompress(stream, lz4_backend_decompress);