SPARK-3711: Optimize where in clause filter queries

The In case class is replaced by a InSet class in case all the filters are literals, which uses a hashset instead of Sequence, thereby giving significant performance improvement (earlier the seq was using a worst case linear match (exists method) since expressions were assumed in the filter list) . Maximum improvement should be visible in case small percentage of large data matches the filter list.
I don't think this is correct.  This will convert `In` expressions when _any_ of the expressions is a literal. Here is an example failure:

```scala
$ sbt/sbt hive/console
scala> sql("SELECT * FROM src WHERE key IN (1, value)")	
res1: org.apache.spark.sql.SchemaRDD = 
SchemaRDD[1] at RDD at SchemaRDD.scala:103
== Query Plan ==
== Physical Plan ==
org.apache.spark.sql.catalyst.errors.package$TreeNodeException: No function to evaluate expression. type: AttributeReference, tree: value#5
```

Instead I think you want `!list.exists(!_.isInstanceOf[Literal])`.