Node::setTextContent should avoid work when nothing changes

We already had code to handle this case, which is shared
by editing as well as HTMLElement::setInnerText.
However that code (replaceChildrenWithText) appears to
be both wrong and unsafe (modifies existing text nodes
without checking if they're shared or not), so I chose
not to re-use it for now.

This was originally committed as:
https://src.chromium.org/viewvc/blink?view=rev&revision=169394
using replaceChildrenWithText, but was rolled out for
breaking a zillion tests. This version does not use
replaceChildrenWithText.
BUG=352836
R=jchaffraix@chromium.org

Review URL: https://codereview.chromium.org/200763006

git-svn-id: svn://svn.chromium.org/blink/trunk@169805 bbb929c8-8fbe-4397-9dbb-9b2b20218538