code: function wrap(klass, methodNames) {
    validateMethodNames(methodNames);
    wrapStaticMethods(klass, methodNames);
    wrapInstanceMethods(klass, methodNames);
    return klass;
  }
docs: Wraps static and instance methods whose name ends with Async, or are
  GeneratorFunctions. Any GeneratorFunction is wrapped with
  bluebird.coroutine(), and others with bluebird.method(). Accepts an optional
  array of method names, wrapping only those found in the array, and disabling
  the Async suffix check. Returns the class.
  
  @param   {function} klass         The class to wrap
  @param   {string[]} [methodNames] Optional array of method names
  @returns {function} The supplied class
  @throws  {Error}    If methodNames is provided, but is not an array