Added json:name attribute for non-XML valid JSON Property Names

Ignoring cleanup, the detail is in commit 9bdeded. Some JSON property names are non-valid XML element names, it was previously impossible to create JSON with such names.

You can now use the json:name attribute to create JSON properties with names which are not valid XML element names. For example if you want to create the JSON:

```json
{
  "id": 1,
  "name": "my-thing",
  "$ref": "1/extra",
}
```

You can now use:

```xml
<json:value>
  <id>1</id>
  <name>my-thing</name>
  <ref json:name="$ref">1/extra</ref>
</json:value>
```