LC (Latent Class) model is now able to produce modal classes allocation for the original dataset. In conjunction, the new_task submission now also saves original values/labels of the respondent, choice-set and alternative columns.

LC model is also now able to export the resulting dataset (with original values/labels for the respondent, alternative and choice-set columns) but also with additional latent class information per respondent (log likeilhood for each class and the modal class index). WebNet GUI reflects this new capability on the completed LC tasks accordnigly.

Dataset sorting has been refactored to be done firstly as a numeric kind of comparison (if both fields are numbers -- alternatively fallng back to a size-proritised lexicographical comparison of the alphanumeric text).

Bug-fix -- the assertion for processing_peers.empty() == false in redistribution of remaining complexities to processing peers was occasionly triggered when there were, in fact, no remaining processing peers . This is more of a regression bug (due to the architectural changes) -- "on_peer_report" et al now simply post the timer for the "on_sync_timeout" and subsequently it may be the case that by the time the "on_sync_timeout" gets to run -- there are no processing peers left.

Minor refactoring of the architecture of setting of the task_info_user_data, etc. -- model_traits used to do this in various model specialisations, but now the model_traits is simplified (mainly to typedefs), and the 'set_task_info_user_data' et. al. have been 'virtualised' in the 'task' type and are expected to be overriden when needed (e.g. in 'multi_logit' model).