Huffman encoding/decoding

Huffman encoding/decoding ([wikipedia](https://en.wikipedia.org/wiki/Huffman_coding)).

The resulting binary code can be returned either as 0-1 string (e.g. `'hello'` -> `1101110010`) or array of int32 numbers (`'hello'` -> `[882, 10]`). The latter case is obviously more memory efficient but less clear to test and play with.

This closes #7.