[CSSimplify] Look through optionals in contextual type while resolving a closure
[CSSimplify] Look through optionals in contextual type while resolving a closure

Let's look through all optionals associated with contextual
type to make it possible to infer parameter/result type of
the closure faster e.g.:

```swift
func test(_: ((Int) -> Void)?) {
   ...
}

test { $0 + ... }
```

In this case dropping optionality from contextual type
`((Int) -> Void)?` allows `resolveClosure` to infer type
of `$0` directly (via `getContextualParamAt`) instead of
having to use type variable inference mechanism.

gregomni/swift,xwu/swift,rudkx/swift,hooman/swift,xwu/swift,apple/swift,xwu/swift,atrick/swift,glessard/swift,apple/swift,tkremenek/swift,xwu/swift,roambotics/swift,benlangmuir/swift,hooman/swift,apple/swift,gregomni/swift,rudkx/swift,parkera/swift,gregomni/swift,rudkx/swift,tkremenek/swift,atrick/swift,parkera/swift,rudkx/swift,glessard/swift,roambotics/swift,parkera/swift,glessard/swift,JGiola/swift,glessard/swift,tkremenek/swift,JGiola/swift,parkera/swift,hooman/swift,JGiola/swift,roambotics/swift,ahoppen/swift,benlangmuir/swift,parkera/swift,benlangmuir/swift,parkera/swift,hooman/swift,JGiola/swift,tkremenek/swift,roambotics/swift,JGiola/swift,tkremenek/swift,tkremenek/swift,apple/swift,glessard/swift,hooman/swift,atrick/swift,hooman/swift,atrick/swift,apple/swift,ahoppen/swift,rudkx/swift,apple/swift,ahoppen/swift,ahoppen/swift,ahoppen/swift,gregomni/swift,ahoppen/swift,roambotics/swift,atrick/swift,atrick/swift,xwu/swift,xwu/swift,tkremenek/swift,parkera/swift,JGiola/swift,parkera/swift,glessard/swift,rudkx/swift,benlangmuir/swift,gregomni/swift,gregomni/swift,benlangmuir/swift,hooman/swift,xwu/swift,roambotics/swift,benlangmuir/swift