Avoid doing detach() when doing a lazyAttach

When doing Node::lazyAttach we mark the node as attached() even though it never went
through attach() which makes us do a virtual call to detach() for the node and all of
its descendants. This patch introduces an iterative non-virtual "detach" specifically
for lazyAttached nodes that just clears the attached and childNeedsStyleRecalc bits
so we can then go through attach().

I switched innerHTML to lazyAttach and noticed that there was a slight performance
regression (~2.5%). Making us not do the detach() calls when lazyAttach'ing removes
the regression. After this patch lands I'll switch innerHTML to lazyAttach.

More generally this will improve the performance of all web apps that do appendChild()
or insertBefore() by skipping the detach() calls in the next style recalc.

This is a somewhat less awesome version of r150924 where I tried to make Node::lazyAttach
not setAttached() and broke everything because I forgot to clear the childNeedsStyleRecalc
bits and also didn't fix all the places where code checks for attached(). Eventually we
should fix those and then we can remove the special non-virtual detach in this patch.
Fixing all this code is a large project though, and we can do it after making the world
lazyAttach.

Review URL: https://chromiumcodereview.appspot.com/22530002

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