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 
My position has always been that anything that can be `const` should be `const`.  Const correctness is useful and sometimes difficult to accomplish.  Adding the `const`s later is much harder than putting them in now.  Effective C++ first edition item 21: Use `const` whenever possible.