Template abstract_clock on Clock:

The abstract_clock is now templated on a type meeting the requirements of
the Clock concept. It inherits the nested types of the Clock on which it
is based. This resolves a problem with the original design which broke the
type-safety of time_point from different abstract clocks.

Reviewers: @howardhinnant, @scottschurr 
 I followed the Meyers advice when I originally wrote it. But I should have put more thought into it rather than blindly accepting a blanket rule. The problem is that this is an abstract interface. We have no way to know if all derived classes will have implementations that are truly `const`.