WIP: Experimental changes in `rolling_var` related to #7900

Added logic to `rolling_var` to detect windows where all non-NaN
values are identical.

Need to assess both correctness and performance impact.
This doesn't seem quite right if val==val, prev=prev, and val==rep==prev. In that case you seem to be incrementing both nobs and nrep here, which I don't think you want to do.

I think the code is getting complex because it's trying to handle every possible combination of val, prev, and rep as an explicit case. I think the code would be much simpler and easier to follow/verify if it first handled the addition of val (which would depend only on val, rep, nobs, and nreps) -- this code would be virtually identical to what you have inside the ``for i from 0 <= i < win``, and then separately handled the removal of prev (which would depend only on prevl, rep, nobs, and nreps). In fact, I think I would just have a single ``for i from 0 <= i < N``, with the body starting out just like in your first ``for i from 0 <= i < win`` loop, and then have an ``if i >= win:`` case that handles the removal of prev (and depends just on prev, rep, nobs, and nreps).