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")];
```

I think the union might be messing things up here. I think it's best to do a copy here, after all `~` is already assumed to be an expensive operation.