code: public static <T> Supplier<T> memoizeWithExpiration(Supplier<T> delegate, long duration, TimeUnit unit) {
  		return new ExpiringMemoizingSupplier<>(delegate, duration, unit);
  	}
docs: Returns a supplier that caches the instance supplied by the delegate and
  removes the cached value after the specified time has passed. Subsequent
  calls to {@code get()} return the cached value if the expiration time has
  not passed. After the expiration time, a new value is retrieved, cached,
  and returned. See:
  <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
  
  <p>The returned supplier is thread-safe.
  
  @param duration the length of time after a value is created that it
  should stop being returned by subsequent {@code get()} calls
  @param unit the unit that {@code duration} is expressed in
  @throws IllegalArgumentException if {@code duration} is not positive
  @since 2.0