I understand that the window iterator has extra parameters (the window size) that the other readers don't have, but we shouldn't need to copy the entire class for that. I think this should be a configuration of the iterator (with reasonable default, say = 400). Soon we will have a factory for these iterators that will take care of these configurations behind the scenes , but for now people can use it directly. Here are a few example usages in my mind: 
```c++
for (const auto& reads_in_window : WindowSamReader{filename}) {
  ...
} 
```

or for a more specialized window 

```c++
for (const auto& reads_in_window : WindowSamReader{filename, 1200}) {
  ...
} 
```

I understand that includes an overload of the SamReader constructor that is only applicable to the Window iterator, but this will change soon when we move to a configuration object with a factory method for the iterator. What do you think?