Improve exceptions, add explanation and derive from std::runtime_error.
Add a bunch of decoders and unit test encoding/decoding roundtrip.