Returns Just ([b1..bp], dc, [t1..tk], [x1..xn]) if the argument
expression is a *saturated* constructor application of the form let b1 in
.. let bp in dc t1..tk x1 .. xn, where t1..tk are the
*universally-quantified* type args of dc. Floats can also be (and most
likely are) single-alternative case expressions. Why does
exprIsConApp_maybe return floats? We may have to look through lets and
cases to detect that we are in the presence of a data constructor wrapper. In
this case, we need to return the lets and cases that we traversed. See Note
[exprIsConApp_maybe on data constructors with wrappers]. Data constructor wrappers
are unfolded late, but we really want to trigger case-of-known-constructor as
early as possible. See also Note [Activation for data constructor wrappers]
in GHC.Types.Id.Make.
We also return the incoming InScopeSet, augmented with
the binders from any [FloatBind] that we return