Initial cleanup. Reduces duplication of code, especially around
constructing transactions, resetting the activation heights, and setting
up the EXPECT calls for accepting and rejecting tests.
Also adds a bunch of comments explaining the test plan and what
particular parts of the test are doing.