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
WebRTC.MediaHandler/MediaStreamManager: support multiple MediaStreams

MediaHandler:
  #addStream -> #addStreams: takes (Array of) MediaStream
  #render: renders only first local/remote stream (see #76)

MediaStreamManager:
  .render:
    * takes (Array of) MediaStream
    * renders only the first (see #76)

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

  #release: takes (Array of) MediaStream
WebRTC: isSupported doesn't require getUserMedia

This allows the default MediaHandler to be used without capturing media.
Stop tracking src/Grammar/dist/Grammar.js

Instead, either build the grammar on the fly (in Node), or build it before browserify and bundle it in at that point. For this to work, a couple of changes were made to src/Grammar/src/Grammar.pegjs to allow the PEG output to be used without hacking it in Gruntfile.js:

* SIP is passed to `parse` in the `options` object instead of at require-time
* parsed objects are stored in `options.data` instead of returned

Other changes:

* PEG options moved from Gruntfile.js to src/Grammar/peg.json
* src/Grammar/index.js builds the grammar on the fly and exports it
  (browserify substitutes src/Grammar/dist/Grammar.js for src/Grammar/index.js)
* src/Grammar.js requires src/Grammar/index.js and wraps `parse` with the
  needed exception handling and return values
* Gruntfile.js: jshint ignores src/Grammar/dist/Grammar.js
* .gitignore .npmignore src/Grammar/dist/Grammar.js
* Gruntfile.js tasks: 'grammar' is run by 'quick' instead of 'travis'
* Gruntfile.js tasks: 'devel' runs 'quick' instead of 'browserify'
* package.json: move pegjs from devDependencies to dependencies
Mask DTLS everywhere
UA: listen for 'unload' and call #stop()

This closes sessions when navigating away from the page/tab
test/spec/SpecUA.js: add failing test for #93
UA: allow configuration options 'stunServers' and 'turnServers' to be []

resolves #93
Utils: getPrefixedProperty: bind property to object
src/SIP.js: inject environment dependencies at require-time

Previously, environment dependencies such as WebSocket and RTCPeerConnection
were assumed to be present as global variables. This required modifying the
global scope to use SIP.js outside of the browser (i.e. PhantomJS or Node).

Now, src/SIP.js exports a function that takes an object specifying the
environment dependencies, so that they can be changed independently of the
global scope.

Backwards compatibility is preserved by introducing src/index.js as the
module's main entry point.  It requires src/SIP.js with an environment that
refers to the global scope in the same way that the previous commit did, so
that the build process produces a bundle that can be used in the conventional
way.
Split src/environment.js into Node/browser versions

src/environment_browser.js:
  Use global variables instead of requiring modules. This undoes the effects of
  the following commits, removing ~1KB from the bundle size:
    51003e3: Timers: require('timers') instead of directly using global
    8baf989: LoggerFactory: require('console') instead of directly using global
    b69fef8: Utils.Promise = global.Promise || require('promiscuous');

src/environment.js:
  Export a Node-compatible environment by extending the browser environment
  with the modules listed above.

Gruntfile.js: Tests polyfill Promise using promiscuous-browser.js
Merge pull request #108 from joseph-onsip/inject

Allow Dependency Injection in Node
(Node) Use 'ws' module for WebSocket
Utils: remove addPromise and callbacksLast
Bump version to 0.6.3
Add hackWssInTransport to UA configuration to fix Asterisk problems. Fixes #97
allow hackWssInTransport for anonymous registrations