Complete revamp of JUnit testing infrastructure

Now restarts a new instance of nachos between each test.
This is what we really wanted originally, but there was no clean way to do it.
There is still no real clean way since lots of Nchos classes use static
variables that need to be reinitialized each time nachos restarts, but I've
found a decent work around to compensate for this.

A "real" fix would be to invoke all nachos classes as singletons and not even
rely on static variables, but this is a much bigger undertaking. With this we
could simply destroy nachos and then reinstantiate to get a clean Nachos
environment. We'll go with what we have for now though...