Introduce DecayCounter.Builder, deprecate DecayCounter constructors
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.
All times kept in nanoseconds

Values still rounded to an even second, temporarily, to check that
functionality remains the same.
Correct getRate/getCount results
Add zeroHistory feature