code: public static void upto(Temporal from, Temporal to, Closure closure) {
          upto(from, to, defaultUnitFor(from), closure);
      }
docs: Iterates from this to the {@code to} {@link java.time.temporal.Temporal}, inclusive, incrementing by one
  unit each iteration, calling the closure once per iteration. The closure may accept a single
  {@link java.time.temporal.Temporal} argument.
  <p>
  The particular unit incremented by depends on the specific sub-type of {@link java.time.temporal.Temporal}.
  Most sub-types use a unit of {@link java.time.temporal.ChronoUnit#SECONDS} except for
  <ul>
  <li>{@link java.time.chrono.ChronoLocalDate} and its sub-types use {@link java.time.temporal.ChronoUnit#DAYS}.
  <li>{@link java.time.YearMonth} uses {@link java.time.temporal.ChronoUnit#MONTHS}.
  <li>{@link java.time.Year} uses {@link java.time.temporal.ChronoUnit#YEARS}.
  </ul>
  
  @param from    the starting Temporal
  @param to      the ending Temporal
  @param closure the zero or one-argument closure to call
  @throws GroovyRuntimeException if this value is later than {@code to}
  @throws GroovyRuntimeException if {@code to} is a different type than this
  @since 2.5.0