As per `NSJSONSerialization` docs, in a valid JSON dict: "All dictionary keys are instances of `NSString`."

Do we ever use custom objects as dict keys? They would have to be converted specifically to strings, not just a JSON object. How can we make that clear?

If we don't use custom objects as dict keys, I would be down for just assuming all dicts use string keys. We have certain requirements on the objects one tries to JSONify, and I think requiring that any dicts have string keys is reasonable.