cleanup = function() {
    if( self.shuttingDown ) {
      self.workers    = [];
      exports.workers = [];
      self.removeAllListeners();
      Queue.singleton = null;
      events.unsubscribe();
      // destroy redis client and pubsub
      redis.reset();
      self.client && self.client.quit();
      self.client = null;
      self.lockClient && self.lockClient.quit();
      self.lockClient = null;
    }
  }
Graceful shutdown

@param {Number} timeout in milliseconds to wait for workers to finish
@param {String} type specific worker type to shutdown
@param {Function} fn callback
@return {Queue} for chaining
@api public