Logger, LoggerFactory: dedupe error/warn/log/debug definitions
Move Logger definition into LoggerFactory.js
LoggerFactory: iterate over `levels` to define error/warn/log/debug
simplify LoggerFactory#print
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