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