Added new tests.
Added new dependencies.
Refactored how encoding/decoding is handled.
Added more comments.
Improved the code-base throughout.
Modified README.