Upon RepositoryService.getItemInfos a JSON object is composed containing
the information for the requested node and its child items up to a
specified or configuration determined depth.

Batch read is triggered by adding a '.json' extension to the resource href.
Optionally the client may explicitely specify the desired batch read depth
by appending '.depth.json' extension. If no json extension is present the
GET request is processed by the base servlet.

The JSON writer applies the following rules:

- Nodes are represented as JSON objects.
- Each Node has its properties included as JSON key/value pairs.
- Single valued Properties are simple key/value pairs.
- Multi valued Properties are represented as JSON array.
- Each Node has its child nodes included as long a maximal depths is not reached.
- Nodes without any child nodes get a special JSON member named
::NodeIteratorSize, whose value is zero.
- If the maximal depth is reached only name, index and unique id of the
direct child are included (incomplete node info). In order to obtain
the complete information the client sends another GET with .json extension.

Same name sibling nodes and properties whose type cannot be unambiguously be
extracted from the JSON on the client side need some special handling:

key must be separated from the value by a ":" surrounded by whitespace.

two pairs must be separated by a line end

the format of the value depends on the diffchar

for moving around node the value must consist of a abs. or rel. path.
in contrast reordering of existing nodes is achieved by appending a trailing
order position hint (#first, #last, #before or #after)

NOTE the following special handling of JCR properties of type
Binary, Name, Path, Date and Reference:

the JSON value must be missing

the POST request is expected to contain extra multipart(s) or request
parameter(s) for the property value(s)

the content type of the extra parts/params must reflect the property
type:"jcr-value/" + PropertyType.nameFromValue(Property.getType).toLowerCase()