[SPARK-4084] Reuse sort key in Sorter

Sorter uses generic-typed key for sorting. When data is large, it creates lots of key objects, which is not efficient. We should reuse the key in Sorter for memory efficiency. This change is part of the petabyte sort implementation from @rxin .
Maybe add a comment that this is ONLY invoked by the default `getKey(data: Buffer, pos: Int, reuse: K)` method. That is, you should not call this from outside.