SynEdit: Rewrite of Caret-class, introduction of simplified base class for faster block(selection) replace operation. Related to secondary report of issue 0023556

git-svn-id: http://svn.freepascal.org/svn/lazarus/trunk@39806 4005530d-fff6-0310-9dd1-cebe43e6787f