* Loops caused local scripts variables to be backed up then restored,
which would have caused a set_var in a loop to have no effect.
* Instead, we back up the state of the variable (existing or not,
value) and either restore the original value or delete the variable
if it didn't exist.
* Support for dumping parsed programs as strings (both a basic,
repr-like version and an indented version that is easier to read)
* Display the parsed program if verbosity is high enough
* Program tracing if verbosity is high enough
* The `add_host` option can be used to add the current host to the
group being created. It avoids having to use a separate `add_host`
instruction in this case.
* The `parent` option can specify the parent group. It avoids having
to use a separate `add_child` instruction in this case.
The "block" instruction allows mulitple instructions to be grouped in
order to be executed based on a single condition, in a common loop, with
a local variable scope. In addition, it provides a way to recover from
errors.