[SPARK-2969][SQL] Make ScalaReflection be able to handle MapType.containsNull and MapType.valueContainsNull.

Make `ScalaReflection` be able to handle like:

- `Seq[Int]` as `ArrayType(IntegerType, containsNull = false)`
- `Seq[java.lang.Integer]` as `ArrayType(IntegerType, containsNull = true)`
- `Map[Int, Long]` as `MapType(IntegerType, LongType, valueContainsNull = false)`
- `Map[Int, java.lang.Long]` as `MapType(IntegerType, LongType, valueContainsNull = true)`
Hmm, that actually makes me think that we should change ArrayTypes default value as well.  Here is my reason: Marking something as not nullable is purely an optimization as adding null checking logic will never cause the answer to be incorrect.  If the user wants that optimization great, but it seems dangerous to assume that we can apply it.