Report skipped tests in the results.

- Keep track of the tests which are skipped because they're known to fail.
- Moved multithreading code in a separate module so it can be re-used.
- Keep track of the tests which are skipped because the CPU is missing features.
- Added --verbose mode

Change-Id: I8832a1ac10738461eb5f4740e8bf060f13866132
diff --git a/test/test-api.cc b/test/test-api.cc
index 53eaae3..5e0001e 100644
--- a/test/test-api.cc
+++ b/test/test-api.cc
@@ -559,9 +559,13 @@
     VIXL_CHECK(os_auto.Has(os_with_id_regs));
     VIXL_CHECK(os_with_id_regs.Has(os_auto));
   } else {
-    printf(
-        "Warning: skipping test because ID register emulation is not "
-        "available.\n");
+    // Note: This message needs to match REGEXP_MISSING_FEATURES from
+    // tools/threaded_test.py.
+    std::cout << "SKIPPED: Missing features: { "
+              << CPUFeatures::kIDRegisterEmulation << " }\n";
+    std::cout << "This test requires the following features to run its "
+                 "generated code on this CPU: "
+              << CPUFeatures::kIDRegisterEmulation << "\n";
   }
 }