WebGL: Refactor active context management.

This CL makes WebGL lost&retore code more succinct.

1. Deactive a context in loseContextImpl(), instead of dispatchContextLostEvent().
Because of
a) Prevent inconsistent state. Currently, activeContext() vector can store a lost
context due to this, so oldestContextIndex() needs to check if active context is
lost. Now we don't need redundant lostContext check. In addition, it does not
make sense that active context list can store a lost context.
b) In the same sense, only maybeRestoreContext() actives a context like loseContextImpl()
in this CL.

2. Don't call activeContexts().remove() adhoc.
Only deactiveContext() calls activeContexts().remove() like only activeContext()
calls activeContexts().append().

3. Change the logic of dispatchContextLostEvent().
Currently, when m_contextLostMode != RealLostContext, a context is added to
forcibly evicted list, in which the context will be restored when another
context is destructed. However, we start the restore-timer when
the context is lost due to AutoRecoverSyntheticLostContext also. It means
AutoRecoverSyntheticLostContext can restore twice. So this CL changes a context
to be added into forcibly evicted list only if SyntheticLostContext.

BUG=392274

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

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