JsonMergePatch: add deserialization support

This has required writing a custom deserializer. A JSON merge patch can either
be a JSON array or JSON object; the generated type differs only by virtue of the
JSON value type.

Any non container JSON value is considered illegal.