Fix for issue #1 - prefix types with JSON instead of JS
Added Printable interface implementation
Marked Invalid as a "private" member
Header documentation for most public functions.