* Programs may start at non-zero instructions
* Input uses mutable VecDeques and consumes values as they are encountered
* Output uses a mutable vector, and multiple outputs will be pushed on it
* If no value is present in the input queue, the program blocks on input
returning the status Status::WaitingForInput and the instruction to resume
the program from.