The mlUnit execution engine is largely class-implemented, but unneccessarily so. Keep the class implementation for states that actually get passed around or undergo non-trivial changes, e.g. test_case and test_result. Change other implementations to functions.
Also merge the two diverged console applications recursive_test_run and run(text_test_runner)