[CSSimplify] Look through optional injection to diagnose argument/generic parameter mismatches
Parameter type could be optional but it shouldn't prevent the solver
from recording an argument mismatch fix since that's the actual issue.
Another significant change here is how `OptionalInjection` is treated
when there is more than just optional injection that has to happen.
For example, `inout T` -> UnsafePointer<U>?` requires multiple conversions
and conversion of `inout` to `pointer` does not have a special path
element, `OptionalInjection` should be dropped to avoid it getting
in a way of `Pointee` mismatch diagnostics.
Resolves: rdar://81425395