SI-8611 Avoid accidental patmat unification with refinement types

In the enclosed test, t8611a.scala, the patterns `O.{A, B}` were
incorrect treated as equivelent by the combination of
`uniqueTpForTree` and `Const.uniqueTpForTree`.

`uniqueTpForTree` used `Type#narrow` to try to create a distinct
type for each new pattern tree it encountered. However, narrowing a
`RefinedType` does not create a distinct type as we are used to
when narrowing, e.g. a class type.

    // Type
    def narrow: Type =
      if (phase.erasedTypes) this
      else {
        val cowner = commonOwner(this)
        refinedType(this :: Nil, cowner, EmptyScope, cowner.pos).narrow
      }

    // CompoundType
    override def narrow: Type = typeSymbol.thisType

This commit creates a fresh existential type symbol rather than
trying to use `narrow`.

I've included a unit test to show the sublteties of narrowing
refinment types.
Merge pull request #3781 from retronym/topic/8611

SI-8611 Avoid accidental patmat unification with refinement types