serialization_sort.h: Abstract file handling into a file_handler class.

Previously, the merge sort implementation in the serialization_sort
class did a lot of accounting for the temporary file names and sizes.
A lot of the internal helpers methods took arguments a and b indicating
the range [a,b) of files to merge.

In the serialization_sort class:

- Get rid of sorted_run_path
- initialize_merger, free_merger_and_files, merge_runs:
  Replace a,b[,dest] parameters with a single fanout parameter.

Introduce serialization_bits::file_handler class
with the following methods:

- std::string run_file(size_t physicalIndex)
- void set_temp_dir(const std::string & tempDir)

- void open_new_writer()
- void write(const T & v)
- void close_writer()

- size_t remaining_runs()
- size_t next_level_runs()

- bool readers_open()

- void open_readers(size_t fanout)
- bool can_read(size_t idx)
- T read(size_t idx)
- void close_readers_and_delete()

- void move_last_reader_to_next_level()

- void reset()
- void increase_usage(size_t idx, stream_size_type sz)
- void decrease_usage(size_t idx, stream_size_type sz)