multicursors: combine cursor and selection into one type
- Keeping them separate is making things painful needlessly and prevents us from sorting the cursors. This results in better overall performance and avoids a lot of needsless word.
- fix crashes if we try to create a cursor in a line greater than lastLine or before 0
- Rewrite selection merging so that it handles all cases correctly and add more tests for it