Reify the squash state/set logic

I'm still looking into the flakey `ChordSpec`, but wanted to get feedback on the most recent commit. The cost/benefit is that the state logic is kept is reduced to a single class. I'm fairly sure that the first commit wasn't quite right either because the window cli test seemed to have an extra num-flip. The big problem is that dump will now be broken for state - it's calling save assuming it's idempotent.
Ignoring the ordering here (it shouldn't be here in this particular case), having the 'skip' means we can see _why_ lines were filtered (eg. by window or filter), which is a bonus.