Covers the TCK with tests of the tests and addresses multiple smaller issues

This PR covers the entire TCK with tests of "how the TCK fails", and multiple wrong mini-implementations of publishers / subscribers. The tests aim to verify that the test failures are actually helpful for implementers.

I have also fixed numerous smaller issues (1 race, 1 wrong method called in tests - would never fail as it promissed, multiple NPE errors avoided, and loads of usability improvements) - see comments in line (I hope github will carry over my comments on that commit to this PR).

This is (IMHO) really important to scrutinize and get in before for RC1 – please review guys!
Resolves #172 as well as multiple "the test is not helpful" or "the test can be racy" things.

I'm not sure about the current 3.17 tests, I have to revisit them again, but have to do some other things today.
It seems like we are using `new Throwable` sometimes and `new RuntimeException` at other times. Why do we use different ones and would it make sense to have a common type for it?