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
Media Handler: renderHint local/remote is an (Array of) HTMLMediaElement

MediaStreamManager.render renders each MediaStream to the corresponding
HTMLMediaElement in the array, wrapping around if needed.

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')
      }
    }
  });