SI-6493 more robust symbol handling in existentialTransform

To illustrate the problem, let's compute a result type for

```
def foo = { class Foo { class Bar { val b = 2 }}; val f = new Foo; new f.Bar }
```

In `existentialTransform`'s state, note the inconsistent symbol ids:

rawSyms    = List(class Bar#49742,     value f#49740, class Foo#49739)
typeParams = List( type Bar#49773, type f.type#49774,  type Foo#49775)
allBounds  =
 Map(class Bar#49742 ->  <: AnyRef#2669{val b#49758: Int#1758},
       value f#49740 ->  <: AnyRef#2669{type Bar#49762 <: AnyRef#2669{val b#49764: Int#1758}} with Singleton#5762,
     class Foo#49739 ->  <: AnyRef#2669{type Bar#49770 <: AnyRef#2669{val b#49772: Int#1758}})

It makes sense to subst the symbols in tp, but the modifyInfo will have little effect on typeParams.
Luckily, coevolveSym will fix up some of the inconsistencies, so that we get
f.type#49774.Bar#49762 forSome { type f.type#49774 <: AnyRef#2669{type Bar#49762 <: AnyRef#2669{val b#49764: Int#1758}} with Singleton#5762 }

The remaining problem is that ExistentialExtrapolation will not consider type Bar#49762 existentially bound.
Instead, it's looking for the stale version in typeParams, Bar#49773.
If it was looking for Bar#49762, the result type would simply be `AnyRef#2669{val b#49764: Int#1758}`

also added vaguely related TODO to switch to memberInfo for
refchecking alias types, because memberType rebinds

Loosen coevolveSym (see SI-8177) a little more.