TextEditor: Control caret offset in Insert/Remove()...

... and fix the invalidation to happen after the operation, since it currently
updates the layout text spans synchronously.
Paragraph: Added Prepend(TextSpan).
CharacterStyle: Added FontSize(), IsBold() and IsItalic().
Text stuff: Fixed various issues with editing.

 * Insert/Remove now works for simple typing.
 * Inserting multiple paragaphs not yet tested.
 * Renamed TextSpan::CharCount() to CountChars() for consistency.
ParagraphStyleData: Fixed line spacing not being set/adopted/compared.
List: Fixed off-by-one check in Add().

Of course we can add right at the end...
ParagraphLayout: Bugfixes.

 * Fixed off-by-one errors in FirstOffsetOnLine() and LastOffsetOnLine().
 * Fixed GetLineBounds() not returning anything y2 and overwriting y1.
TextEditor: Correct line up/down on first/last line.

 * Move to beginning of first line, or end of last line respectively.
TextDocument: More fixes

 * Fixed ParagraphIndexFor() not returning the last paragraph when the
   requested text offset was right at the text end.
 * Fixed off-by-one error detecting inserted line-breaks.
TextDocumentLayout: Fixed invalidating

 * Add new ParagraphLayouts for new Paragraphs in the TextDocument.
 * Actually mark layout invalid, so that height changes in paragraphs
   are accounted for and newly added paragraphs are positioned.
TextDocument::Insert() fixed line break case.

 * Always add back the second part of the split paragraph, even if it has
   a length of 0.
libroot: Fix gcc2 build