Add JSON utils from PuppetDB, with tweaks.

All functions and tests have been carried over, though instead of
registering the org.joda.DateTime encoder when the namespace is
evaluated, it is now up to the consumer to explicitly call
`add-common-json-encoders!`. A new macro, `with-datetime-encoder`,
allows you to override the default datetime encoder with your own while
evaluating the macro's body.

The generate-string and generate-stream functions have type hints in
order to avoid introducing more reflection than the cheshire generate-*
functions do.