An interpreter for Imp.
The function stepn can be used to run an Imp program for (at most) a given number of steps. The function step* defines exhaustive execution, but is not itself executable. Here we define a program-mode function that exhaustively executes the step function, until termination, or the program-mode function will not itself terminate.