Redmine#4703: new mapjson() function and support data containers in maparray()

see https://cfengine.com/dev/issues/4703

* `maparray()` can now process slists, classic arrays, and data containers
* new function `mapjson()` exactly like `maparray()` but the output is parsed as JSON into a data container
* new `this.k2` variable, for when we iterate through a second-level slist or container

Documentation and examples will follow upon merge.

The fixes for https://cfengine.com/dev/issues/4704 (marked as TODO in the acceptance test) will follow upon merge.