Add test setup and takedown functionality

This allows the user to seperate individual tests into a function, and
register a callback to run before and after each test.

	setup();
	runTest();
	takeDown();

This allows for a workflow more similar to JUnit, for those familar with
that.