virtual: Make it possible to add tests to the ms driver

Introduce an Executor that forwards all testcase related methods to
a list of testcases. Allow to instantiate them by name and use the
result to access the statistics.

Change-Id: Ia65ee53987e92b24e6b8c40e1376bc74dc260180
diff --git a/suites/nitb_netreg_mass/register_default_mass.py b/suites/nitb_netreg_mass/register_default_mass.py
index f4e5e80..262b271 100644
--- a/suites/nitb_netreg_mass/register_default_mass.py
+++ b/suites/nitb_netreg_mass/register_default_mass.py
@@ -10,6 +10,7 @@
 nitb = suite.nitb()
 bts = suite.bts()
 ms_driver = suite.ms_driver()
+ul = ms_driver.add_test('ul_test')
 modems = suite.all_resources(suite.modem)
 
 print('Launching a simple network')
@@ -35,7 +36,7 @@
 #
 # 99% of LUs should complete
 # 99% of successful LUs should complete within 10s.
-stats = ms_driver.get_stats()
+stats = ul.get_stats()
 if len(modems) > 0 and stats.num_completed < 1:
     raise Exception("No run completed.")
 completion_ratio = stats.num_completed / stats.num_attempted
@@ -46,7 +47,7 @@
 
 # Check how many results are below our threshold.
 acceptable_delay = timedelta(seconds=30)
-quick_enough = len(ms_driver.lus_less_than(acceptable_delay))
+quick_enough = len(ul.lus_less_than(acceptable_delay))
 latency_ratio = quick_enough / stats.num_attempted
 if latency_ratio < 0.99:
     raise Exception("Latency ratio of %f%% lower than threshold." % (latency_ratio * 100.0))