Use registerWeakMembers to manage observer root.

Re-landing after revert:

https://codereview.chromium.org/1600243002

Also fix IntersectionObserver::dispose to not allocate memory, since
it runs during gc.

BUG=540528
R=haraken@chromium.org,dcheng@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#370079}
4 files changed