added jps.cachedValue(fn,...):
caches a value returned by a function and only refreshes it
every jps.UpdateInterval.
Should reduce rotation execution time if a lot of values are
caluclaated over and over again