Added ability to use Scala Durations as cache expiration periods

Basically adding the ability for the Cache to take Durations, in addition to integer seconds. Durations end up being converted to Integers.

Durations smaller than 1s are rounded up to 1s, and Duration.Inf is used for infinite cache duration.

In Lighthouse it's https://play.lighthouseapp.com/projects/82401/tickets/980