Implement TimeSources

Note that this probably shouldn't be landed until we formally agree on this approach. However, it's useful to share as a proof of concept and for initial review.