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
fix(preprocessor): do not show duplicate warnings
fix(config): make the config changes backwards compatible