merge_sort.h: Handle empty input as a special case.

When no items are pushed, set `m_reportInternal` to true and free the
m_currentRunItems buffer immediately.

In `calc`, since `m_reportInternal` is true, nothing is done.

`can_pull` returns false since `m_itemsPulled` ==
`m_currentRunItemCount` == 0.
Initial work on a new serialization framework.
Fix array serialization invalid reads/writes.

A multiplication by sizeof(T) should have been sizeof(T::value_type).
Block rewritten to avoid the explicit size multiplication.
Fix serialized_size not using a const ptr.
Add serialization_stream.
Add serialization reverse reader and writer.
Move serialization_header into serialization_stream.cpp.
Add serialization speed test
Add serialization sorter.
Add is_trivially_serializable
Fix definition order of serialize vs. serialized_size.
Implement serialization_stream byte size/offset for progress information.
Add support for temp_files in the file name parameter to open of serialization streams.
Add piped serialization input/output.
Fix serialization_reader not setting m_index and m_blockSize to 0 in open.
Add ut-serialization stream_reopen.

Demonstrates a bug in serialization_reader.
serialization_sort.h: Introduce parameter struct and state checking.
serialization_sort.h: Introduce merger class.
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)
Implement a serialization_sort pipeline node. (#57)