Introduce KeepAliveWhilePending to ScriptPromiseResolverWithContext.

Some modules, for example WebMIDI and WebCrypto, needs "Async Initializer".
The initializer should stay alive until the initialization succeeds (i.e. the
associated Promise is resolved), the initialization fails
(i.e. rejected), or the associated ExecutionContext is stopped.
This CL introduces the the constructor mode ScriptPromiseResolverWithContext.
If KeepAliveWhilePending is specified, the created resolver stays alive while
one of the above conditions meets.
Each initializer can stay alive by inheriting ScriptPromiseResolverWithContext.

This CL rewrites WebMIDI and WebCrypto async operations with it.

BUG=361041

Committed: https://src.chromium.org/viewvc/blink?view=rev&revision=176381

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

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