Clear cached distribution state when doing setNeedsDistributionRecalc

When you remove a <shadow> element you need to clear the insertionPoint pointer on
the older shadow root if it was pointing to this InsertionPoint otherwise we have a
stale pointer in the ScopeContentDistribution since this was a weak pointer.

When looking at this I decided to fix it with a two pronged approach:

First the pointer is now a RefPtr so we can never have stale pointers in distribution.
This is enough to fix the bug.

Second I made it so calling setNeedsDistributionRecalc clears all the cached state
since this gives much nicer GC behavior. Previously if you removed a bunch of nodes
that were distributed and then removed the host the distribution would keep those
nodes alive until you either dispatched an event on the detached subtree or called
getDistributedNodes() which the author was unlikely to do. Now we eagerly clear
those pointers so when removing nodes that were distributed and dropping all refs
the nodes will get collected immediately.

BUG=267763

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

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