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:

{
  id: 1,
  name: "my-thing",
  $ref: "1/extra",
}

You can now use:

<json:value>
  <id>1</id>
  <name>my-thing</name>
  <ref json:name="$ref">1/extra</ref>
</json:value>