Fix a couple UI bugs.
Remove Debug.Assert() so unit tests can run.
Prune suboptimal branches, yielding massive optimization all around.

By not holding references to user interactions which are deemed
suboptimal, we realize over an 80% decrease in memory usage and,
surprisingly, a 60% speed increase.

The speed increase is surprising because by the time we prune the
branch it has already been completely explored, which should account
for most of the time spent.  So the only explanation here is that
the speed increase comes purely from a) increased cache locality due
to the fact that less memory is being used overall, and b) more
efficient use of .NET's garbage collector.

This is similar in nature to the speed increase we saw when changing
the State structure to use a more compact format with bitfields.
Update screenshot.