expose convertValue in JsonUtil, clean up tests

This also makes it so that all of the JsonUtil tests use implicit wrapper methods instead of the JsonUtil object methods, so that we're always testing through those instead of having a basic little test at the end that does so.
These are new tests explicitly for the `convertValue` method I'm introducing here, to make sure they fail to cast in certain cases. There are arbitrarily many variations that we could test here, but I felt this was a good set for now.