Add flag to disable withFilter pattern desugaring

This adds a flag called `-Zirrefutable-generator-patterns` which changes
desugaring of code like the following:

    for {
      (a, b) <- List(1 -> 'a', 2 -> 'b')
      (c, d) <- List(3 -> 'c', 4 -> 'd')
    } yield (a + c, b + d)

Which previously would turn into something like:

    List(1 -> 'a', 2 -> 'b').withFilter {
      case (a, b) => true
      case _ => false
    }.flatMap {
      case (a, b) =>
        List(3 -> 'c', 4 -> 'd').withFilter {
          case (c, d) => true
          case _ => false
        }.map {
          case (c, d) =>
            (a + c, b + d)
        }
    }

With this new flag, it only becomes:

    List(1 -> 'a', 2 -> 'b').flatMap {
      case (a, b) =>
        List(3 -> 'c', 4 -> 'd').map {
          case (c, d) =>
            (a + c, b + d)
        }
    }

Which creates a few benefits:

1. We don't have to do a useless call to withFilter
2. We can use patterns on things without withFilter
3. Things don't silently disappear when patterns are wrong
Stupidly minor nitpick that probably isn't worth mentioning, but `for comprehensions` -> `for-comprehensions`