Modernize WebRTC with promises compatibly with hybrid.

Let me know if I missed anything. Leaving polish of legacy note to others.
Here's a throw that gets converted to a promise reject. Is that the common way for APIs that use promises? I guess other things will continue to throw; for example TypeError on bad arguments.