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