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 re-enabled the printing of `time_point` to `std::ostream` to see if it would work now that `abstract_clock` used the same types as std clocks. But there were compile errors, `localtime_r` is a non-standard function. I fixed the compile errors but then when I went to test it, I got assertions deep in the standard library. So I turned the code off. `tm` is a C standard library type. I agree, double underscores should be avoided. I didn't write this code though, Howard wrote it, and I don't have an alternative for pretty-printing of time_points to standard streams. On the bright side, its commented out.