docs: function firstMatching(boolean, dropWhile) {
      return function (stream, iterator, callback) {
          var condition
          if (boolean) {
              condition = negate
          } else {
              condition = iterator
          }
  
          return first(dropWhile(stream, condition), !boolean)
  
          function negate(value, callback) {
              if (!callback) {
                  return !iterator(value)
              }
  
              iterator(value, function (err, result) {
                  if (err) {
                      return callback(err)
                  }
  
                  callback(null, !result)
              })
          }
      }
  }