SPARK-2684: Update ExternalAppendOnlyMap to take an iterator as input

This will decrease object allocation from the "update" closure used in map.changeValue.
Does it makes sense to include a more collection-oriented interface, more like scala.collection.mutable.Buffer#insertAll:
```scala
def insertAll(coll: Iterable[Product2[K, V]]): Unit = insertAll(coll.iterator)
```
...so that you can do things like `externalAppendOnlyMap.insertAll(aMap)` instead of `externalAppendOnlyMap.insertAll(aMap.iterator)`?