function _es6WrapClass(shim, Base, fnName, spec, args) {
  return class WrappedClass extends Base {
    constructor(...cnstrctArgs) {
      // Assemble the arguments to hand to the spec.
      const _args = [shim, Base, fnName, cnstrctArgs]
      if (args.length > 0) {
        _args.push.apply(_args, args)
      }

      // Call the spec's before hook, then call the base constructor, then call
      // the spec's after hook.
      spec.pre && spec.pre.apply(null, _args)
      super(...cnstrctArgs)
      spec.post && spec.post.apply(this, _args)
    }
  }
}
Wraps an es6-style class using a subclass.

- `_es6WrapClass(shim, Base, fnName, spec, args)`

@private
@param {Shim} shim
 The shim performing the wrapping/binding.
@param {Function} Base
 The es6 class to be wrapped.
@param {string} fnName
 The name of the base class.
@param {ClassWrapSpec} spec
 The spec with pre- and post-execution hooks to call.
@param {Array.<*>} args
 Extra arguments to pass through to the pre- and post-execution hooks.
@returns {Function} A class that extends Base with execution hooks.