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.
You can sneakyThrow them.

~~~java
    /**
     * A version of "sneaky throw" to relay exceptions
     */
    static void rethrow(Throwable ex) {
        if (ex != null)
            ForkJoinTask.<RuntimeException>uncheckedThrow(ex);
    }

    /**
     * The sneaky part of sneaky throw, relying on generics
     * limitations to evade compiler complaints about rethrowing
     * unchecked exceptions
     */
    @SuppressWarnings("unchecked") static <T extends Throwable>
        void uncheckedThrow(Throwable t) throws T {
        throw (T)t; // rely on vacuous cast
    }
~~~

http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/jsr166e/ForkJoinTask.java?view=markup