checkpoint on mem-model refactoring.
fixed up displaying the state of the computer if it didnt halt normally.
cleanups
bunch of runtime computer related changes:

fixed up displaying the computer state on an error
fixed up push and pop to work with Pointers, because rsp is always a pointer to memory.
changed runOp to be an operation on Runtime objects instead of just ints.
fixed L1Interp so that the tests pass. this required delicate checking of which operations should use pointers vs nums, and calling runOp in other place.
did some code cleanups that the intellij plugin suggested
bogus commit
most of the way towards getting L2 interpreter running on new memory model
fixed accidental infinite loop in L1Interp, added some extra pointer arithmetic.
progress on L3Interp with new mem model, and more:

fixed up all interpreter functions that take a "caller" arg to take it as the first arg
added stuff to Memory:
  * newArray (and made allocate call it)
  * changed print to return (Num 1)
  * added arraySize
  * added safeReadMem and safeWriteMem which call arrayError on index out of bounds
moved bind2 to Utils and added bind3
other small code cleanups
finished up L3Inter (not yet tested) and figured out how to get the final state even in the face of an error.
memory related refactorings:

refactored memory so that it isn't encoded
made L1/L2 interpreters encode numbers themselves
provided print with a flag to say whether the numbers are encoded are not
fixed a few bugs in the L3 interpreters (though not all tests are passing yet)
checkpoint on new mem model. all but 3 L3 tests passing.
print should apparently return 0. this might require more work in the future.
checkpoint: all (uncommented) tests passing
added run-tests.sh, which helps me when cabal tests go into an infinite loop
checkpoint: trying to run all tests.
Checkpoint on huge refactoring to extract common code for interpreters for L3 and above
all tests are passing, i think. but some are commented out because they just take a very long time. i need some optimizing passes.
refactored out common code from L3/L4 interpreters.
refactored out common code from L3/L4 interpreters, boiled them completely down to their essence.