Add support for tagging tests and test cases.

Delivers the following features:

* tests and test cases can be tagged, with sensible defaults (test/test case names)
* `+[SLTest testsWithTags:]` allows a subset of tests to be selected while debugging
* the `SL_TAGS` environment variable allows a subset of tests and/or test cases to be selected in CI
* tests/test cases can be excluded by prefixing tags with "-"
* tests and test cases can respond to additional environment variables by overriding `+supportsCurrentEnvironment` and `+testCaseWithSelectorSupportsCurrentEnvironment:`

Many thanks to all (@jazzychad, @qiffp, @maxgabriel, @mrsamuelkim) who have weighed in on this topic. I think that this solution is general purpose enough to encompass the majority of your use cases.

In particular, it allows particular tests _or_ groups of tests to be selected, because tests are automatically tagged with their names; it does not interfere with the focus mechanism; it does not require that tagging is exhaustive, because tags can be excluded; and not only tests but also test cases can be tagged, using the same mechanism.
NIT: You only really need to do this if testSupportsCurrentDevice is true. The way it is now might be easier to read even if it is less efficient than having an early return or wrapping it in an if (testSupportsCurrentDevice).