add array_map_with_islast
rework toplevel variables into objects

keeping state in objects now. The purpose was to get some better
control over what was used where. Disadvantage of objects is that
their accesses are not checked by the compiler, though, or more to the
point, variables are grouped now, is that any better really?
generalize (make usable for other projects)
add --warn-hint option
variable naming
html/gen: move ml2json specific parts to a config file