I think we also want a `PreloadBoundaryValues()` method.

You could argue I could get the same data by calling `PreloadValueAtTime()` twice, but we need to have a different staleness behavior for the boundary values. Let's say I do `rate(foo[1d])` and we just started collecting the `foo` timeseries 20h ago. The first point would not be within staleness, but we still want to return the first point, so we can compute a sensical rate.