Support key conversion in generate

Parsing functions in cheshire support conversion of hash keys to keywords via a custom function so that you can, for example, map underscores to dashes, etc.  This pull request provides similar functionality for the generating functions so that you can provide a custom function to handle the conversion of keyword keys into strings rather than using the default "name".

With this code it is now possible to have full round-trip idomatic usage for a server which both consumes and produces json using (for example) underscored string keys, converts them to dashed keyword keys in clojure and then back to underscored string keys for output json.