Add undo/redo support for GtkTextView, GtkText, and GtkEntry
This series of commits adds support for various text widgets in GTK. In particular, the GtkTextBuffer design is loosely based around the expectations that users would have coming from GtkSourceView based applications (such as Gedit).
The implementation tries to avoid extraneous allocations using a number of techniques, such as embedding the queue linked list into the actions themselves and using inline strings until they are too large and require an allocation.
Actions are joined together based on their kind, so that each insertion is not necessary to replay.
Some changes to GtkEntryBuffer::deleted-text was necessary to conform to expectations of how signals should work to allow access before and after the operation completes.