Allow for reuse of object instance.
Use static polymorphism for synchronous sources.

This commit also streamlines the interface for synchronous event extraction.
Flush index after processing a segment.
Make indexing batch size configurable.
Only write modified indexes to filesystem.
Avoid copy of large data.