First pass at pluginify static method.

This pull request creates a static method on `CachingWriter` that accepts an object literal of methods/props and an optional description string to generate a class that extends `CachingWriter`, abstracting away all the inheritance ceremony.

Example:

```javascript
module.exports = CachingWriter.pluginify({
  constructor: function(options) {
    this.customThing = options.customThing;
  },
  updateCache: function(srcDir, destDir) {
    /* Do the main processing */
  }
}, 'MyCustomCachingWriter');
```

Names and conventions are up for debate. Would love your feedback!


I am likely missing some of the nuance here. Why instantiate without arguments, then instantiate with arguments again?