code: final long reserveAndGetWaitLength(int permits, long nowMicros) {
      long momentAvailable = reserveEarliestAvailable(permits, nowMicros);
      return max(momentAvailable - nowMicros, 0);
    }
docs: Reserves next ticket and returns the wait time that the caller must wait for.
  
  @return the required wait time, never negative