Don't rely on system time for writing histories.
Rather than on system time we're now depending on the last time a relay or bridge was seen in a consensus or status to determine when history ends for this relay. This has the advantage of making the write step deterministic, and it produces the exact same graph intervals for the different documents of a given relay or bridge. A minor downside is that we're now depending on node statuses _and_ another status file in order to produce a history document. Should be okay. Define graph end as last full data point before the relay/bridge was last seen. Also make sure that graphs end at that defined graph end and do not continue just because there's more history available. This is mostly to exclude falsely-reported statistics. Implements #16513.