docs: function ArgError (message) {
    if (!(this instanceof ArgError)) return ArgError.apply(this, arguments);
    // NOTE Error is a factory function, will return a new object regardless, so
    // Error.apply(this, arguments) will not work
    var e = /*new*/ Error(message);
    // NOTE must use Object.getOwnPropertyNames() bc .stack and .message are
    // non-enumerable
    Object.getOwnPropertyNames(e).forEach(function (key) {
      this[key] = e[key];
    }, this);
    this.name = "ArgError";
  }