Simplify the test runner; use promises