Support snapshot windows

Well no reason you didn't look at it Mark - I never created the PR. Apologies.

> I really don't know that this is better than Iterable. What is the thing you get with this?

So we basically want to map (or fold) over the `Iterable<ByteWritable>` to return a `Iterable<Fact>`, where we only construct/share a single `MutableFact`. If there's a nice way to do this without the extra level of indirection I have here then we should definitely do that instead.