[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`.
I was trying to follow this, but found it's hard to define the `resolved` in `GetField`. We have on idea whether a instance of `GetField` have been processed by the rule.
Another question, Does the logic related to resolution include looking for corrected `StructField` according to the `fieldName`? If so, I think we should use `UnresolvedGetField` and resolve it in a rule and the `GetField` should only contains the corrected `StructFiled` and its `ordinal`.
I'm not sure how much does looking for the corrected `StructField` cost, but if we do it here and get the corrected `StructField`, we still can't pass the `StructField` to `GetField` as `GetField` only accept `fieldName`, and `GetField` will do the searching again.