[WIP] text.semanticInvert

My take on `semanticInvert` based on the discussion in share/ShareJS#257

## Left todo

- [ ] How to handle delete operations
- [ ] Randomized tests