foreach
-------

Evaluate a group of commands for each value in a list.

::

  foreach(loop_var arg1 arg2 ...)
    COMMAND1(ARGS ...)
    COMMAND2(ARGS ...)
    ...
  endforeach(loop_var)

All commands between foreach and the matching endforeach are recorded
without being invoked.  Once the endforeach is evaluated, the recorded
list of commands is invoked once for each argument listed in the
original foreach command.  Before each iteration of the loop
"${loop_var}" will be set as a variable with the current value in the
list.

::

  foreach(loop_var RANGE total)
  foreach(loop_var RANGE start stop [step])

Foreach can also iterate over a generated range of numbers.  There are
three types of this iteration:

* When specifying single number, the range will have elements 0 to
  "total".

* When specifying two numbers, the range will have elements from the
  first number to the second number.

* The third optional number is the increment used to iterate from the
  first number to the second number.

::

  foreach(loop_var IN [LISTS [list1 [...]]]
                      [ITEMS [item1 [...]]])

Iterates over a precise list of items.  The LISTS option names
list-valued variables to be traversed, including empty elements (an
empty string is a zero-length list).  (Note macro
arguments are not variables.)  The ITEMS option ends argument
parsing and includes all arguments following it in the iteration.
