Improve SafeCloseable usage, including in test cases
 - add cleanupXXX() methods to parallel closeXXX() methods
   These are no-ops if passed null.
 - closeXXX() and cleanupXXX() methods can only be called once closing
   IllegalStateException is thrown otherwise.
 - SafeCloseableTestBase throws close cause exception at end
 - ExecutorTestBase implements ThreadFactory, UncaughtExceptionHandler
   By using this in the executor, otherwise uncaught exceptions are
   caught immediately, closing the test case and returning the error.