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 
A puzzlement and a note on code that is not part of this change.  Puzzlement: I'm trying to figure out where the type`tm` is defined.  It used to be a pointer and now it's not.  But I haven't found where that change occurred yet.

Note on un-changed code.  Names with leading underscores and especially double leading underscores give me the willies.  These names are reserved for the implementation.  They may be working just fine today and break radically when there's a compiler update.  I'm not expecting the names to change this time around, but they strike me as a risky way to live.