AST: Loop control statements with jump targets

(next, redo, last)

Uses a hash of stacks of lists to track the loop-alikes and loop control
statements as the AST is built. Dynamic labels (recent perls: next $foo)
are excluded, but those are batshit insane anyway. In a nutshell, each
label string (including "" for "no labels") has its own stack of lists
of loop control statements. When we enter a loop, we push a new such
list to the "" stack and possibly the loop's labelled stack.
When encountering a loop control statement, it is pushed onto the
end of the list that is at the top of the stack for the loop control
statement's label. When leaving a loop, we take one list from the stack
for "" and for the label of the loop (if any). We then update the jump
targets for the loop control statements in the respective lists that
we just popped off the stack(s).

(Thanks, Mattia, for the algorithm.)

This change includes tests, but I haven't had a creative infusion on how
to sanely check that the jump target is correct in the tests.