Implement configurable reporters

Much of this code is based on the configurable reporters in @spenceralger's gulp-jshint.

This implementation is somewhat consistent with the proposal in #21:

- Linting and reporting are handled as separate processes -- `gulpjscs()` lints the files and adds metadata to each entry in the vinyl stream, and `gulpjscs.reporter()` outputs a report based on the earlier linting
- Custom reporters are supported, either as module names or import paths
- This package implements a `fail` reporter that raises a PluginError if any lint checks failed

But it also differs from #21 in a few important respects:

- `gulpjscs.reporter()` lets existing reporter implementations write directly to `console.log` -- it does not generate a vinyl file object, but rather yields the original collection of vinyl files
- Other reporters do not fail when errors occur -- since this implementation passes through the original file collection, you can just pipe to the fail reporter after your primary reporter if you want to break the stream

Note that this is a backward incompatible change, since users will need to add a reporter to their gulp streams to get the same results as in previous versions.
I should say, though, that I'm not entirely sure whether this `try...catch` is a good idea at all.  Any error we catch will presumably be an error in JSCS, not the linted code.  It seemed like a nice idea at the time to let the later handlers in the stream decide how to handle an error in JSCS.  But, none of the existing reporters can report on exceptions, which leads to the `console.log` stuff that you flagged below.  And for most use cases, I'm not sure there's really much point in letting the stream proceed after JSCS blows up anyway.