progress now only emits on 101-199 (not 100)
progress switched back, for all provisional responses now
Looser toplabel parsing
Added missing
iceFailed event
Header parsing shouldn't throw exceptions.  Thanks to Balazs Sandor for PR #102
Refactored PR #101.  Thanks to Emilio, Ptah, and the LiveNinja team.
Added additional ICE events

Added additional ICE events of disconnected and closed
Fixed spacing to match repo
Gruntfile.js: tell uglify to give ascii output

see https://github.com/onsip/SIP.js/issues/106#issuecomment-57349358

resolves #106
UA#onTransportError: don't try next transport if UA is closed

addresses #63
Gruntfile.js: uglify once, copy twice

This trims roughly 1 second from `grunt build`
Gruntfile.js: remove templates from banner string

Simplify browserify's postBundleCB
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