JSON object and JSON array operator overloads

This patch adds the necessary operator overloads for appending to JSON objects and JSON arrays, so that the user doesn't need anymore to manipulate the underlying `JSONValue` structures.

Examples:
```
JSONValue foo = JSONValue([10, 12]);
foo ~= ["abc"];  // foo contains [JSONValue(10), JSONValue(12), JSONValue("abc")];

JSONValue bar = JSONValue(["key1": 10]);
bar["key2"] = "abc";  // bar contains ["key1": JSONValue(10), "key2": JSONValue("abc")];
```

Please also test binary `~` to make sure the original `JSONValue` is not aliased:
````
auto arr2 = jarr ~ [1,2,3];
arr2[0]=999;
assert(jarr[0] == 10);
````