SI-7269 Rework MapLike#retains to account for desugaring change

`MapLike#retains` contains a for-comprehension that relied on the strict
`filter` by its generator. You can't, in general, iterate a mutable map
and remove items in the same pass.

Here's the history of the desugaring of:

  def retain[A, B](thiz: mutable.Map[A, B])(p: (A, B) => Boolean): thiz.type = {
    thiz.foreach {
      case (k, v) =>
        if (p(k, v)) thiz -= k
    }

Before regression (c82ecabad6~1):
         thiz.filter(((check$ifrefutable$1) => check$ifrefutable$1: @scala.unchecked match {
       case scala.Tuple2((k @ _), (v @ _)) => true
       case _ => false
     })).withFilter(((x$1) => x$1: @scala.unchecked match {
       case scala.Tuple2((k @ _), (v @ _)) => p(k, v).unary_$bang
     })).foreach(((x$2) => x$2: @scala.unchecked match {
                     case scala.Tuple2((k @ _), (v @ _)) => thiz.$minus$eq(k)
                   }));

After regression (c82ecabad6, which incorrectly assumed in the parser that
no filter is required for isInstanceOf[Tuple2])

         thiz.withFilter(((x$1) => x$1: @scala.unchecked match {
       case scala.Tuple2((k @ _), (v @ _)) => p(k, v).unary_$bang
     })).foreach(((x$2) => x$2: @scala.unchecked match {
                     case scala.Tuple2((k @ _), (v @ _)) => thiz.$minus$eq(k)
                   }));

After the reversion of c82ecabad6, v2.10.2
This is also after 365bb2b4e, which uses `withFilter` rather than `filter`.

     thiz.withFilter(((check$q$1) => check$ifrefutable$1: @scala.unchecked match {
       case scala.Tuple2((k @ _), (v @ _)) => true
       case _ => false
     })).withFilter(((x$1) => x$1: @scala.unchecked match {
       case scala.Tuple2((k @ _), (v @ _)) => p(k, v).unary_$bang
     })).foreach(((x$2) => x$2: @scala.unchecked match {
                     case scala.Tuple2((k @ _), (v @ _)) => thiz.$minus$eq(k)
                   }));

This commit does the same as `SetLike#retains`, and converts the map to
an immutable list before the rest of the operation.

Review by @JamesIry. /cc @paulp