Change the handling of the "no tests to run" case.

Previously, if typ failed to find any actual tests to run, either
because there were no tests, or because all of the tests were
being skipped, it would error out. This turns out to be awkward
behavior because it can change the result of the test run depending
on whether or not someone skips a test.

So, this CL changes things so that the test run "succeeds" as long
as no tests actually fail. If no tests are found, or every test is
skipped, that's still a success.

As part of this, this change also changes the format of the
one-line summary from "%d tests run, %d failures" to
"%d tests passed, %d skipped, %d failures" to be a little clearer
about the three types of results (and to help the user figure out
what happened if all of the tests were skipped or nothing was found).
4 files changed