code: final void bipush(CompletableFuture<?> b, BiCompletion<?, ?, ?> c) {
      if (c != null) {
        while (result == null) {
          if (tryPushStack(c)) {
            if (b.result == null)
              b.unipush(new CoCompletion(c));
            else if (result != null)
              c.tryFire(SYNC);
            return;
          }
        }
        b.unipush(c);
      }
    }
docs: Pushes completion to this and b unless both done. Caller should first check that either result
  or b.result is null.