[layoutng] Implement state machine for async layout

This turned out to be more involved than I expected, because I had to make
more classes garbage-collected in order to make them members.

I later learned that I could have gotten by with not making some of them
gc'd and instead just tracing them (as described in the last part of "Field
Errors" in https://www.chromium.org/developers/blink-gc-plugin-errors), so let
me know if you want me to go back to that approach.

This also removes NGBoxIterator in favor of just traversing nextSibling
manually; with the async code, this works more naturally. I also
changed NGBox to always point to a layout object, and using nullptr
when it is not pointing to one, with it being garbage collected that
also worked more naturally that way.

R=eae@chromium.org, ikilpatrick@chromium.org, glebl@chromium.org
BUG=635619

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

Cr-Commit-Position: refs/heads/master@{#415027}
11 files changed