Record the execution of void type Instructions into the trace.

Recording the void Instructions is incredibly inefficient in terms of storage, because if we simply knew the BasicBlock path through the program then we could simulate the re-execution of these void Instructions (they don't produce a value anyway, and any side effects are recorded separately). However, the measured increase in trace size on real student programs is quite small, and this allows us to quickly enable some nice movement features.

Add new movement functions in seec::cm, moveForwardToCompleteTopLevelStmt() and moveBackwardToCompleteTopLevelStmt(). As the names suggest, these functions move until the point that a "top-level" statement has been evaluated (e.g. as would be used in the dynamic evaluation tree).

This also allows us to use the Stmt completion mapping information in the implementation of moveForwardUntilEvaluated() and moveBackwardUntilEvaluated(), greatly simplifying their implementation.