feat(client): capture all `console.*` log methods
Merge pull request #548 from gfxmonk/patch-all-log-methods

feat logging: patch all available `console.*` log methods
docs: fix link to config file
feat(config): allow configurable launchers, preprocessors, reporters

karma.defineLauncher('my_chrome', 'Chrome', {
  flags: ['--start-maximized']
});

karma.definePreprocessor('coffee_bare', 'coffee', {
  options: {
    bare: true
  }
});

karma.defineReporter('html_coverage', 'coverage', {
  ...
});

The reason, why I decided for this solution, rather than inlining like this:
browsers = [{
  type: 'Chrome',
  flags: ['--start-maximized']
}];

Is that the solution above allows using these custom launchers from CLI. It also makes it easier to create only a single instance of a preprocessor (if the configuration is the same).

Closes #317
feat(config): make socket.io transports configurable
fix(preprocessor): use graceful-fs to prevent EACCESS errors

Closes #566
fix(config): fix the warning when using old syntax
chore: use grunt-npm, grunt-bump
feat(proxy): add https proxy support

This enables Karma to proxy to a https server. We still need to enable Karma itself to serve on
https.

See #293
chore: fix grunt release task
chore: update contributors
chore: release v0.9.3
fix(config): allow parsing the config multiple times

The initial version of the WebStorm plugin did parse the config file multiple times. That was causing errors, because of redefining these global properties.
docs: fix typo in public api page

Change 'exitted' to 'exited' in two places on the public api page.
Merge pull request #602 from kolvia/docs-fixtypo

docs: fix typo in public api page
feat(config): pass the config object rather than a wrapper

**The reasons for this change:**
1/ easier to override config properties
The config object was not exposed and karma.configure() only does shallow merge.
Now, this is possible, eg. config.sauceLabs.testName = 'overridden';
This is helpful especially when using multiple config files (eg. a shared config between multiple projects or having a per developer config file that overrides project defaults).

2/ declarative definition of custom launchers/preprocessors/reporters makes more consistent and therefore easier to explain.

3/ declarative definition of custom launchers/preprocessors/reporters also makes it possible to use these with grunt-karma or from JSON config file.

The change is done in a backwards compatible manner, if one use old APIs such as karma.configure()
or karma.defineLauncher(), it works. Only warning is displayed. These extra APIs will be removed in
v0.10.0.

BREAKING CHANGE: please update your karma.conf.js as follows:
// before:
module.exports = function(karma) {
  karma.configure({port: 123});
  karma.defineLauncher('x', 'Chrome', {
    flags: ['--disable-web-security']
  });
  karma.definePreprocessor('y', 'coffee', {
    bare: false
  });
  karma.defineReporter('z', 'coverage', {
    type: 'html'
  });
};

// after:
module.exports = function(config) {
  config.set({
    port: 123,
    customLaunchers: {
      'x': {
        base: 'Chrome',
        flags: ['--disable-web-security']
      }
    },
    customPreprocessors: {
      'y': {
        base: 'coffee',
        bare: false
      }
    },
    customReporters: {
      'z': {
        base: 'coverage',
        type: 'html'
      }
    }
  });
};
fix(config): better errors if file invalid or does not exist

Remove one test, that does not make any sense now that we require() config files - you can specify config file as a directory, assuming it's a valid node module (contains index.js or package.json).
fix(launcher): better errors when loading launchers
fix(preprocessor): better errors when loading preprocessors
fix(reporter): better errors when loading reporters