Factor out moving over loci to an iterator to allow for folds

I wanted to factor out moving over loci for a set of SlidingWindows.  Until now we had only performed a flatMap over loci in a window collecting results at each loci.  I wanted to do two things 1) Factor out the code to move loci by loci over a set of sliding windows and 2) Add some other operations as we move loci by loci, i.e. a fold so we can aggregate data about the reads in order.  I will add some tests for the fold, but wanted to get some feedback earlier on.

cc @timodonnell Might be worth checking out for you if you are looking to get back into guac things.
yea I am intrigued by the pattern of explicitly requiring `headWindow`, and I agree that it seems weird that the code is generalized over these sequences of windows when we often know it is exactly 1 or 2

I was actually saying that `restWindows` could (should?) just be a `Seq[SlidingWindow[Region]]`.. the varargs is only ever called with a `.tail:_*` so it seems like it's not worth the syntactic trickery?