Use nose for testing

Nose lets us run a limited amount of test suites, can automatically run a debugger on an exception during testing, and evaluate coverage and other nice things.

Cleans up `runtests.py` as well.