$ javac src/Joiners.java && java Joiners     (28-beta+21-ea)
-- allSuccessfulOrThrow(): List in FORK order, not completion order
  [slow, fast, medium]
-- allSuccessfulOrThrow(): one failure cancels the others, join() throws ExecutionException
  ExecutionException, cause = java.lang.IllegalStateException: broken failed
  interrupted: [slow]
-- anySuccessfulOrThrow(): the race; losers are interrupted
  winner: B-50ms
  interrupted: [A-300ms, C-300ms]
-- anySuccessfulOrThrow(): when every subtask fails
  ExecutionException, cause = java.lang.IllegalStateException: one failed
-- awaitAllSuccessfulOrThrow(): returns null (Void), like the zero-argument open()
  join() = null, a=a, b=b
-- allUntil(predicate): stop when two subtasks have completed
  SUCCESS t1
  SUCCESS t2
  UNAVAILABLE
  UNAVAILABLE
  interrupted: [t3, t4]
-- the Function overload: join() throws OUR exception type
  caught ServiceException: service call failed: orders failed
