text.hpp: simplify the text_reader/word_stream API

Instead of reading events from a document_reader, passing them to
a next_item method and then reading the resulting text events from
the text_reader/word_stream, simply pass the document_reader to the
constructor of the text_reader/word_stream and read the resulting
text_events. The text_reader/word_stream will read document_events
as needed.

This change has several benefits:

  1.  The API is simpler and cleaner;

  2.  The code is faster;

  3.  It allows word_stream to have greater control over the way
      it processes events from a text_stream, allowing better
      context analysis (e.g. ellipsis and cardinal number detection,
      especially spanning multiple document events) and limiting
      the read-ahead queue to a single clause (for lower overhead
      and thus performance).