json-encoder: panic when map key is not string or numeric
lower FnMut to FnOnce since json-hack is no longer required
Allow reporting of json-encoder-errors and implement for bad hash map keys
fix fallout from invalid map key type error
auto merge of #19490 : oli-obk/rust/json_non_string_key_maps, r=alexcrichton

importing object type string key maps is still supported
writing them should be explicit, and can be done as follows

```rust
let some_tree_map : TreeMap<String, Json> = ...;
Json::Object(some_tree_map).to_writer(&mut writer);
```

related to #8335, #9028, #9142