* When the loop variable state is restored, the cache must also be
modified.
* What needs to be done depends on whether a host fact by the same
name also exist.
* Fuck that cache thing. It's going away next time I can hack on this.
* When a block is done executing, local variables must be restored to
their previous values ; however, host variables may have been
updated inside the block. Therefore it is necessary to reset the
variable cache.
* 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.