better worker.promisify method based on Q.ninvoke