Introduce RateCounter abstract class; make DecayCounter extend it

And replace DecayCounterSnapshot with new RateCounterSnapshot
Keep snapshot() from making multiple calls to getTickInSeconds

In general, each public method should do nowInSeconds = getTickInSeconds()
once, and pass that value all around, to avoid having different notions of
"now" confusing things.