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!


Sure, my only thought is that a constructor function should be optional. I can check if it exists, and if it does, but is not a function, I'll throw.