SI-1503 deprecate unsound type for ident/literal patterns

TODO: reduce the deprecation warning's verbosity (only warn when the unsound assumption matters)

What type should a variable bound to the value matched by a pattern have?
To avoid CCEs, it should be a type that's implied by the matching
semantics of the pattern.

Usually, the type implied by a pattern matching a certain value
is the pattern's type, because pattern matching implies instance-of checks.

However, Stable Identifier and Literal patterns are matched using `==`,
which does not imply a type for the binder that binds the matched value.

We now emit a deprecation warning for these situations.

In the -Xfuture type checking becomes stricter, so that programs that used
to crash with a CCE (because we blindly cast to the type of the pattern,
which a `==` check does not imply) now get a weaker type instead (and no cast).
They may still type check, or they may not.

To compensate for this fix, change `case x@Foo => x` to `case x: Foo.type => x`,
if it's important that `x` have type `Foo.type`.

NOTE: once SI-4577 is fixed, matching of singleton type patterns will use `eq`,
not `==` (so that the types are not a lie).

See also: SI-5204