[updated] jsonsEqual (check of String keys)
[changed] equalsMetadataProperties() method use the new jsonsEqual
[added] JSONException to getChangesMap() and testChangesMapJSON()

[fixed] toJson() method ->
     -   I think the JSONObject(Map) constructor is buggy. If you initialized a JSONObject with a Map<Long,Long> then you become a JSONObject with a Long as key but you need a String for JSONObject().get(String)