Simplify analysisdata parallelism model

Instead of trying to hide all parallelism within the AnalysisData and
AnalysisDataStorage classes, add an AnalysisData::finishFrameSerial()
call and make higher-level code responsible of calling that in suitable
context to do serial processing for data frames.  This then needs to be
propagated to parallel-aware data modules.

This substantially simplifies the implementation and makes it easier to
argue about correctness, since now nearly all potentially parallel code
will operate on distinct data, reducing the need to think about
synchronization.  The drawback is that now the calling code needs to
think about this, but there will be very little code that this actually
affects, and that is in the framework, not in every analysis tool.
Further, this actually makes the parallelism easy to express in terms
of, e.g., tbb::parallel_pipeline(), so the clarity can actually improve
without too much complexity.

Update and improve related high-level documentation to make these
aspects easier to explain.

Change-Id: Ibbfb4b7aa3acf7fcda0bfdb4da7212f5b11c1fcb