Fix Window by Count Unsubscribe Behavior

This fixes https://github.com/ReactiveX/RxJava/issues/1546 where unsubscribes would occur prematurely for non-overlapping `window(size)` and would not unsubscribe at all for overlapping `window(size, skip)`.

It also reorganizes the `window` unit tests which were all combined in one file when the implementations are split across 4 files. This is now easier to understand and use.
I guess over an `observeOn` on boundary this could become an issue (and if someone took a reference and put it in another thread and called it).