Result reader changes for preview and export: Phase 1

Phase I of supporting previews and export in result readers. It includes
changes to common code across all readers and specific code of XML
readers.

Worth noting when reviewing: all single readers expose SearchResults
interface. It was introduced for multi-reader to return an iterator for
each result set without other methods in single readers themselves such
as 'close'. StreamIterableBase is a base classs shared by all readers,
including both single and multi readers. Multi readers work by returning
the same single reader instance for each result set, which keeps its
advancing reading position.

Phase II will includes changes for Json and CSV, and addtional unit
tests.