Split functionality into two, distinct classes

One (Decoder) for decoding and one (Encoder) for encoding.

We should consider moving all the classes into a namespace, to we don't have namespace collisions with any other, potential gems. 
But I don't have strong opinions about it.