json: Refactor the APIs

Refactor the `json` library taking feedback of @privat, @Morriar and @xymus into account. Also, correct some bugs related to JSON encoding/decoding and remove ad hoc escaping routines.

TODO: Support Unicode escaping.

Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
pareil, indiquer ce que c'est pour aider a deboguer. Le "This" est un peu evasif vu que l'objet original est perdu.

D'ailleurs, ne pourquoi pas 'attacher' le jsonvalue original et la clé à l'erreur pour simplifier le deboguage quand les choses vont mal.

~~~~
   result = new JsonError("Invalid `key` access on a `{json_type}` JsonValue", key, self)
~~~~

avec une classe JsonError augmentée des attributs qui vont bien:

~~~~
class JsonKeyError
    super Error
    var invalid_key: Object
    var original_value: JsonValue
end
~~~~

et une methode `json_type: String` pour savoir a qui on a à faire.

~~~~
fun json_type: String do
   if is_null then return "null"
   if is_int then return "int"
   # ...
end
~~~~