[WIP] Argument type validation with user-friendly error messages

I think `JSON_TYPES` can be defined at the module level rather than the class level. That way, if the user wants to modify the dictionary, they don't need to subclass `Arg`. This mapping should not differ between classes anyway.