code: @CheckReturnValue
      @SchedulerSupport(SchedulerSupport.CUSTOM)
      public final Maybe<T> timeout(long timeout, TimeUnit timeUnit, Scheduler scheduler, MaybeSource<? extends T> fallback) {
          ObjectHelper.requireNonNull(fallback, "fallback is null");
          return timeout(timer(timeout, timeUnit, scheduler), fallback);
      }
docs: Returns a Maybe that mirrors the source Maybe but applies a timeout policy for each emitted
  item using a specified Scheduler. If the next item isn't emitted within the specified timeout duration
  starting from its predecessor, the resulting Maybe begins instead to mirror a fallback MaybeSource.
  <p>
  <img width="640" height="305" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/timeout.2s.png" alt="">
  <dl>
  <dt><b>Scheduler:</b></dt>
  <dd>You specify which {@link Scheduler} this operator will use.</dd>
  </dl>
  
  @param timeout
  maximum duration between items before a timeout occurs
  @param timeUnit
  the unit of time that applies to the {@code timeout} argument
  @param fallback
  the MaybeSource to use as the fallback in case of a timeout
  @param scheduler
  the {@link Scheduler} to run the timeout timers on
  @return the new Maybe instance
  @see <a href="http://reactivex.io/documentation/operators/timeout.html">ReactiveX operators documentation: Timeout</a>