Simplify and completify TypeChecker

* Make the decoders PartialFunctions
* handle null
* Handle ID, Version, and JSON types
* Add test