Implement Promises for MediaKeys.create(), MediaKeys.createSession(),
MediaKeySession.update() and MediaKeySession.release().

Promises are implemented by asynchronously passing a
WebContentDecryptionModuleResult object to Chromium, similar to the
way WebCrypto does it. When Chromium has completed the operation,
the promise will be resolved or rejected appropriately.
public/platform changes have already been submitted.

Due to the current way callbacks are implemented (passing a client
interface in on a call), the promise result for createSession() is
actually created at call time rather than when the promise is resolved.
This requires a special promise resolver, as otherwise gc() could
reclaim the object as no other object has a reference to the newly
created object.

All the unprefixed EME content browser tests are updated. Since all
the tests need to be async, I've had to split some tests into separate
files. I've also added a new test to verify that gc() doesn't affect
MediaKeys.create() or MediaKeys.createSession() (while waiting for the
result it was possible for gc() to determine nobody had references to
the object and attempt to free it).

BUG=358271

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

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