This involved redesigning the model_loop() method. Instead of yielding both the spin containers and
the spin IDs, now only spin IDs are yielded. This is important as the model loop is used
independently of the data pipes. Hence the spin containers cannot be yielded as multiple pipes are
compared within the model loop. The auxiliary method _spin_ids_to_containers(spin_ids) has been
added to obtain the list of spin containers from the list of spin IDs.
To support model selection, the methods duplicate_data(), model_desc() and model_statistics() have
been added, and model_type() aliased to the common _model_type_local() method.