ENHANCEMENT: Do not attempt to run abstract test classes

There is no reason to try to run test cases of a class that is abstract.  By
skipping them we allow developers to create abstract test case classes that
have test functions in them.  This is especially helpful when someone is
testing multiple implementations of the same service interface.  Most of their
tests can be in the abstract class, and then they can create concrete test
classes for each of their implementations and inherit all of the testing that
is built into the abstract class.
Merge pull request #2057 from jthomerson/enhancement_3.1_do_not_run_abstract_test_cases

ENHANCEMENT: Do not attempt to run abstract test classes