Re-land "WebGL: Refactor active context management."

r177871 reverted r177833 "WebGL: Refactor active context management.",
which caused assertion failures on debug GPU bots. This CL relands the CL.

The ASSERT reveals a hidden bug; forcibly evicted contexts list doesn't remove
the context when the context is restored by WEBGL_lose_context extension.
This CL fixes the bug.

In addition, introduce AutoRecoveryMethod enum, and split LostContextMode enum
to clarify lost context cases.
5 kind of context lost cases match the enums as follows;

   CASE                   LostContextMode      AutoRecoveryMethod
===================================================================
1. Real lost             RealLostContext             Auto          
2. WEBGL_lose_context  WebGLLoseContextLostContext  Manual   
3. Multisampling changes SyntheticLostContext        Auto     
4. Active DOM stop       SyntheticLostContext       Manual
5. Too many contexts     SyntheticLostContext    WhenAvailable

BUG=392274

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

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