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>
Je propose qu'ici ca retourne un JsonError plutot que faire un abort.
On est dans un monde controlé, on peut créer (et maintenir) un état d'erreur jusquà ce qu'on sorte du jsonvalue.

~~~
var jv = """{"a": {"b": 1}}""".to_json_value
assert jv["a"]["b"].is_int
assert jv["toto"]["b"].is_error
~~~

donc ajouter un truc du genre
~~~
else if is_error then
   return self
else
   var err = new JsonError("No key {key}")
   return new JsonValue(err)
end
~~~