Refactoring: Caret is now responsible for inserting text

Caret got #insert_before and #delete_before methods which do two things:
1) update the position of the Caret
2) Call TextNode#push() or TextNode#pop() to actually insert or delete the content