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. The reason is to support a variable number of arguments to the constructor. E.g. you can't

`new SomeConstructor.apply(this, arguments);`

But you *can*

```javascript
var instance = new SomeConstructor();
SomeConstructor.apply(instance, arguments);
```

That said, if you're locking your constructor API to `CachingWriter(inputTrees, options)`, then this can be simplified.