SPARK-2761 refactor #maybeSpill into Spillable

Moved `#maybeSpill` in ExternalSorter and EAOM into `Spillable`.
This import was used because of the funky type parameter. It will be removed after I refactor that bit out.

```scala
trait Spillable[C <: { def estimateSize(): Long }] {
```