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
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.
git mv src/index.js src/index_browser.js

src/environment.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/index.js:
  Export the Node-compatible SIP.js by adding the modules listed above to the
  environment passed to src/SIP.js.

Gruntfile.js: Tests polyfill Promise using promiscuous-browser.js
(Node) Use 'ws' module for WebSocket