highlightCharacterRanges revisited

- Overlapping highlights of same class where not merging correctly.
- `className` param can be `false` to erase existing highlights (maybe not so clean to implement it here)
- `exclusive` param, if `true` highlights with different `classApplier` are removed from ranges (check for `className` instead of `classApplier`?)

`CharacterRange.prototype.complements` was added for ranges subtraction