Template abstract_clock on Clock:

Sorry for the mixup, there was a bug in DecayingSample! The changes will need to be audited carefully. Unit tests pass now.

Reviewers: @scottschurr @rec 
I think there's an extra initialization here:  you cast this to a `duration` and then you use that `duration` to initialize another `duration`...?

If this is correct, perhaps extract a local variable with a descriptive name to explain this?