\brief JSON Service program

From the main web site:

<p>
JSON (JavaScript Object Notation) is a lightweight data-interchange
format. It is easy for humans to read and write. It is easy for
machines to parse and generate. It is based on a subset of the
JavaScript Programming Language, Standard ECMA-262 3rd Edition -
December 1999. JSON is a text format that is completely language
independent but uses conventions that are familiar to programmers
of the C-family of languages, including C, C++, C#, Java, JavaScript,
Perl, Python, and many others. These properties make JSON an ideal
data-interchange language.
</p>

JSON is built on two structures:

<ul>
  <li>A collection of name/value pairs. In various languages, this is
      realized as an object, record, struct, dictionary, hash table,
      keyed list, or associative array.
  </li>
  <li>
      An ordered list of values. In most languages, this is realized as
      an array, vector, list, or sequence.
  </li>
</ul>

<p>
These are universal data structures. Virtually all modern programming
languages support them in one form or another. It makes sense that a
data format that is interchangable with programming languages also be
based on these structures.
</p>

In JSON, they take on these forms:

<p>
An object is an unordered set of name/value pairs. An object begins
with { (left brace) and ends with } (right brace). Each name is followed
by : (colon) and the name/value pairs are separated by , (comma).
</p>

Concerning this implementation:

<br><br>

The pointer to the JSON object will be check on every procedure call.
If the pointer does not point to a JSON object an escape message will
be send to the next level of the call stack.

<br><br>

If the JSON obect is queried for an entry of a specific type and the
type does not match with the expectation of the procedure an escape
message will be send to the next level of the call stack.

<br><br>

All the allocated memory of the JSON object and its entries is managed
by this service program and will be freed with the call of the
procedure <em>dispose</em>. No manual deallocation must be done.

\author Mihael Schmidt
\date   20.03.2008

\link http://www.json.org JSON
\link http://www.rpgnextgen.com?content=json

\rev 27.01.2010 Mihael Schmidt
     Added support for getting numbers with procedures json_getInt,
     json_getLong, json_getDouble no matter what the original type was
     (f. e. double value will be cast to int with json_getInt).

\rev 13.02.2011 Mihael Schmidt
     Fixed bug in remove procedure. Replaced string and hex constants
     with unicode constants.

\rev 09.04.2011 Mihael Schmidt
     Fixed memory management error in toString procedure. 

\rev 24.06.2011 Brian Garland
     Remove leading plus (+) from floating point numbers when creating
     a string from a json object.

\rev 23.10.2011 Mihael Schmidt
     Switched from Linked List to Arraylist and by that removing a 
     dependency to Linked List <br>
     Fixed bug in escapeLastToken procedure

\rev 22.01.2012 Matthias Aumüller
     Fixed bug in escapeLastToken procedure. Replaced constants with
     its unicode representation.

\rev 31.01.2012 Klaus Meinhardt
     Fixed bug: duplicate key triggers escape message on put procedure

\rev 24.07.2012 Hugo Cantor
     Bugfix: json_putString : wrong parameter value length from CEEDOD
                              added new parm for length
