[oilpan]: Fix crash due to ephemeron queued flag not being cleared.

When tracing an ephemeron we register a weak table callback to support tracing only those values where a weak key is still alive. We maintain a m_queueFlag to only queue the callback once. This flag used to be cleared during the per thread weak processing, but we cannot assume the per thread weak processing will execute before another GC is scheduled.
This can get us into the case where we incorrectly think the ephemeronIteration callback is queued when it actually has been executed and cleared out in the previous GC.
To avoid this I have added a new callback which is called during the weak pointer processing done before we exit collectGarbage and hence before any thread commences execution. This ensures that the flag is always cleared before a new marking phase.
I have also added an ASSERT detecting if we get into a state where the flag is set, but no callback is queued.

This should fix the crash in following tests:

callbacks-are-called-in-correct-context.html
worker-read-file-async.html
audits-empty-stylesheet.html
audits-panel-noimages-functional.html
heap-snapshot-loader.html

While debugging I also found one case where we didn't know the full type definition before calling into the ObjectAliveTrait in Visitor::isAlive, thanks for adding the same check that Ian added in weak member tracing.

R=ager@chromium.org, erik.corry@gmail.com, haraken@chromium.org, oilpan-reviews@chromium.org, tkent@chromium.org, vegorov@chromium.org, zerny@chromium.org
BUG=

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

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