ResizeObserver pt5: size change notification

This change implements size change notification algorithm.
Design doc at https://docs.google.com/document/d/1G4OmqqlFY3H3erQAUmteKES02-bIECikDjWBrDKH9PA/edit?usp=sharing

Size change notification
We collect and deliver notifications about all Elements
whose size has changed inside the event loop.
The algorithm loops until all notifications are delivered,
or it hits the depth limit.

c = ResizeObserverController();
for (limit = c.gatherObservations(0);
      limit != ResizeObserverController::kDepthLimit;
      limit = c.gatherObservations(limit)) {
      	c.deliverObservations();
      }
      if (c.skippedObservations()) {
        c.clearObservations();
        sendError()
      }

For efficiency, we avoid continuosly polling all elements
for size changes. Instead, an Element notifies ResizeObservation
when its size might have changed. ResizeObservation propagates
this change to ResizeObserver, which propagates to
ResizeObserverController. All of them set a flag indicating that
they might have been changed.
The flag is cleared when observations are delivered.

BUG=612962

Review-Url: https://codereview.chromium.org/2188983003
Cr-Commit-Position: refs/heads/master@{#408867}
6 files changed