Massive reorg to make use of lazy lists to keep track of the program state
WIP: start to clean up tests