Reimplement Shadow DOM distribution as a tree walk

This reimplements Shadow DOM distribution as a top down tree walk where at recalcStyle
time we distribute the whole tree. We now track which ElementShadows need redistribution
with a flag and then track on the host and all its ancestors that children need to go through
Node::recalcDistribution() just like recalcStyle.

This patch makes ShadowDOM/LargeDistributionWithLayout:Runs perf test an astounding
25-30% faster! The rest of the perf tests seem about the same, maybe 1-2% faster.

To make this work I also had to make Node::lazyAttach traverse through ShadowRoots just like
in the original patch http://src.chromium.org/viewvc/blink?view=revision&revision=154720 but
now distribution is not in the middle of recalcStyle so we won't hit assertions there.

I also had to teach InsertionPoint how to lazyAttach its distribution. This turns out to be
the source of the original bugs related to distribution. If you called lazyReattach() on an
InsertionPoint it would do ::detach() which detaches the distributed nodes since
InsertionPoint::detach walks over m_distribution, but then it only does setAttached() and
setNeedsStyleRecalc() inside lazyAttach on the InsertionPoint leaving all the distributed
nodes in the tree detached which is bad and confuses the style recalc and distribution code
later.

BUG=264064

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

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