Having a general purpose encoder and decoder without a specification was confusing.

Without a specification on what is wanted, it's really hard to determine
where to go with the encoder and decoder classes. They were too general
purpose from the start. So, I got rid of them, and started with a class
that is more narrow and specific in what it does. This will create a
clearer path on what to implement and how to implement it.