normalize() {
    if (!this.isValid) return this;
    const vals = this.toObject();
    normalizeValues(this.matrix, vals);
    return clone(this, { values: vals }, true);
  }
Reduce this Duration to its canonical representation in its current units.
Assuming the overall value of the Duration is positive, this means:
- excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)
- negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise
  the overall value would be negative, see third example)
- fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)

If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.
@example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }
@example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }
@example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }
@example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }
@return {Duration}