Point error to incompatible argument instead of call expression (#7470)
Previously we pointed to the beginning of the call expression if there
was an incompatible argument, which is not great, particularly if there
are multiple arguments.
Also point to incompatible list/dict/set item instead of the beginning
of a list/dict/set expression.
Note that this is a breaking change. Some `# type: ignore` comments
will have to be moved to new lines.
I had to update the output of many test cases, mostly because error
ordering was changed.