fix(watcher): watch files that match watched directory

Closes #521
fix(launcher): ignore exit code when killing/timeouting

Most of the browsers returns "not-normally" (because of receiving a signal) and therefore exit event gets null exit code. But PhantomJS exits "normally" with status code 1 (after receiving TERM signal).

I think this logic is better - show error, if process exits during a state which does not expect exiting (CAPTURED, BEING_CAPTURED).

Closes #444
fix: capturing console.log on IE

Use Function.prototype.apply.call(log, ...) instead of log.apply(...)
to avoid an error when IE's console is open.

Closes #329
Merge pull request #538 from gfxmonk/console-log-apply-fix

fix karma.js: Fix for IE's console.log's lack of `apply`
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'
      }
    }
  });
};