Simplified unit testing framework

Tests, instead of being their own derived classes, are simple
classes that take a name and a function object.