function and (...validators) {
  const $async = validators.some(v => v.$async)
  const $watchTargets = validators.reduce((all, v) => {
    if (!v.$watchTargets) return all
    return all.concat(v.$watchTargets)
  }, [])
  let $validator = () => false
  if (validators.length) $validator = $async ? asyncAnd(validators) : syncAnd(validators)
  return {
    $async,
    $validator,
    $watchTargets
  }
}
Returns true when all validators are truthy
@param {...(NormalizedValidator | Function)} validators
@return {{$validator: function(...[*]=): (boolean | Promise<boolean>), $async: boolean, $watchTargets: any[]}}