[SPARK-3698][SQL] Correctly check case sensitivity in GetField

This PR is a follow up to https://github.com/apache/spark/pull/2382
It fix a bug when resolve something like `a.b[0].c.d`, https://github.com/apache/spark/pull/2382 only do case sensitive check when resolve `Unresolved("a.b")` to `GetField(Attribute("a"), "b")`, but not `c` and `d`.
What about something like:

```scala
q transformExpressions {
  case g @ GetField(child, fieldName) if child.resolved && ! g.resolved =>
    val options = g.structType.fields.filter(f => resolver(f.name, fieldName))
    options match {
      case Seq(oneMatch) => GetField(child, oneMatch)
      case Seq() => g // No match: leave unresolved
      case multipleMatches =>
        sys.error(s"Ambiguious reference to $fieldName matches ${multipleMatches.mkString(",")}")
    }
}
```

That way all logic related to resolution happens here in the analyzer and GetField can remain unchanged.