Change 500 reason phrase to "Internal Server Error"

See https://github.com/onsip/SIP.js/issues/32#issuecomment-45348197
Session.js: InviteServerContext - add receiveNonInviteResponse

This allows the InviteServerContext to be able to send in-dialog MESSAGE
requests. See
https://groups.google.com/forum/#!msg/sip_js/H27XRsTnBhA/-XaGf_bbjJAJ
Use require() and browserify to organize dependencies and compilation.
Clean up module dependencies.

- LoggerFactory does not depend on SIP
- Constants depends only on SIP.name and SIP.version
- Exceptions does not depend on SIP
- Timers does not depend on SIP
- Transport depends on window
- SIP.MediaHandler depends on EventEmitter, not SIP
- WebRTC depends on Utils, not SIP
- Hacks depends on window, not SIP
- DigestAuthentication depends on Utils, not SIP
Grammar module depends on SIP
One class per file. Each file exports the class, and doesn't set SIP.*
Let modules require() their own dependencies.

- LoggerFactory.js require()s Logger.js
- Session.js, Invite*Context.js require() Session/Constants.js
- Session.js require()s Session/DTMF.js
- WebRTC.js require()s WebRTC/Media{Handler,StreamManager}.js
- Incoming{Request,Response}.js require() IncomingMessage.js
- Dialogs.js require()s Dialog/RequestSender.js
mv {Dialogs,Session,WebRTC}.js $1/index.js, omit require() ".js" suffix
Move (set/clear)(Timeout/Interval) into Timers module.
More dependency cleanup:

- Dialog module does not depend on window
- Transport module depends on WebSocket, not window
- LoggerFactory module depends on window.console, not window
- Hacks module does not depend on window
- SIP.js: pass window only to modules that depend on it
Allow environment-specific dependencies to be given at require()-time

For example, this works in Node:

  var SIP = require('./src/SIP.js')({
    WebSocket: require('ws')
  });
  var ua = new SIP.UA({traceSip: true});
  ua.message('user@domain.com', 'hi from node');

with the following caveats:

  1. SIP.version === '<%= pkg.version %>'
  2. SIP.name === '<%= pkg.title %>'
     (...and therefore...)
  3. ua.configuration.userAgentString === '<%= pkg.title %>/<%= pkg.version %>'

since the substitution is done by grunt-browserify in the postBundleCB