switched from free-form templated tasks to std::function
added 'testing' framework