Media Handler: renderHint local/remote is an (Array of) HTMLMediaElement

This removes one layer of nesting from the invite/accept mediaHint.

Note that <video>s no longer get muted if an <audio> is provided alongside.

Usage (compare with 4096365):

  var session = new SIP.UA().invite('welcome@onsip.com', {
    media: {
      render: {
        remote: [
          document.createElement('audio'), // included to demo array support
          document.createElement('video')
        ],
        local: document.createElement('video')
      }
    }
  });
WebRTC.MediaHandler/MediaStreamManager: support multiple MediaStreams

MediaHandler:
  #addStream -> #addStreams: takes (Array of) MediaStream
  #render: renders all local/remote streams, not just first

MediaStreamManager:
  .render:
    * takes (Array of) MediaStream
    * renders each MediaStream to the corresponding HTMLMediaElement
    * wraps around element array if needed

  #acquire:
    * returns a Promise of Array of MediaStream
    * mediaHint.stream is (Array of) MediaStream

  #release: takes (Array of) MediaStream
Merge branch 'joseph-promise' into joseph-webrtcinject

Conflicts:
	src/WebRTC/MediaStreamManager.js
WebRTC.isSupported no longer requires getUserMedia

This allows Node applications to be as simple as:

  global.WebSocket = require('ws');

  var wrtc = require('wrtc');
  for (k in wrtc) {
    global[k] = wrtc[k];
  }

  var SIP = require('./');
  var ua = new SIP.UA({traceSip: true});
  var session = ua.invite('welcome@onsip.com', {media: {stream: []}});