Use require() and browserify to organize dependencies and compilation.

This is a squashed cherry-pick of the first three commits of
https://github.com/onsip/SIP.js/pull/30, plus a small fix to the Timers module,
and slight updates to package.json and .npmignore.

The reason this isn't in separate commits is that the first three didn't work
individually. Squashing them together allows:

- the automated tests to pass
- <script src="dist/sip.js"></script> to work as usual
- a Node.js phone to be tested as follows:

    npm install ws
    node
    WebSocket = require('ws')
    var SIP = require('./.');
    var ua = new SIP.UA({traceSip: true});
    ua.message('welcome@junctionnetworks.com', 'Node says hi!');

For completeness, unsquashed commit messages are listed below:

1: Use require() and browserify to organize dependencies and compilation.

Conflicts:
	Gruntfile.js
	package.json
	src/tail.js

Cherry-picked from:
  https://github.com/joseph-onsip/SIP.js/commit/df33833c9db8ace3e72b38a5e5ecc16c863baff8

2: 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

Conflicts:
	src/Timers.js
	src/WebRTC.js

Cherry-picked from:
  https://github.com/joseph-onsip/SIP.js/commit/9af96e907f839adf926ab757cca2b7923b72ab9a

3: Grammar module depends on SIP

Cherry-picked from:
  https://github.com/joseph-onsip/SIP.js/commit/3e0c165d5f1b687b4bd6a989e03be584fb1e0259

4: Timers module depends on window

See:
  https://github.com/joseph-onsip/SIP.js/commit/2510347d7a29c85191c4d78aaf2cbbc6e2261187#diff-7f75ad1c8b0a978a180c50fe4c649e8bL25

5: package.json: set "main": "src/SIP.js"

Now that our src/ files are modules, we don't have to compile the module before
require()ing it.

6: .npmignore dist/sip*

There's no need for `npm install` to bring in dist/ files. Leave that to bower.