WIP SI-6541 Avoid existential feature warning for unapply

This is a suprisingly tricky one to implement, probably
for similar reasons as the case class `copy` method, which
has inspired reams of comments in Unapplies.

Right now, I'm going down a similar route: generate the
method bodies as before, and patch up the method result
type in a custom type completer post factum.

Crucially, this completer has access to the symbol of the
unapply parameter (the scrutinee), from which it can
accurately project the member types the case accessors.

The body of unapply still contains a frowned-upon existential
type, but I've disabled this feature warning inside synthetic
methods.

An interesting followup to this might be to retain a more
precise type for unapply, in which we try to retain
singleton types for the elements.