Further TextCursor refactoring. Moved cursor_character_position code to separate class and split update_cursor_screen_position into smaller methods