CharWindow: implement a .mergeWith() method

This method will return a NEW CharWindow (which it has to, since CharWindow is
immutable) which is the merge of the current window with its argument.

Necessary for .subsequence() implementation since a requested subsequence can
cross window boundaries.