This class wraps access to beforeGroups and afterGroups methods,
since they are passed around the various invokers and potentially
modified in different threads.
This class is responsible for invoking methods:
- test methods
- configuration methods
- possibly in a separate thread
and then for notifying the result listeners.
FIXME: reduce contention when this class is used through parallel invocation due to
invocationCount and threadPoolSize by not invoking the @BeforeClass and @AfterClass
which are already invoked on the original method.
This class is the default method selector used by TestNG to determine
which methods need to be included and excluded based on the specification
given in testng.xml.