Optimize statistics calculations for fetcher data objects

Closes #18 (closed).

Each FetcherData object provides now three more variables: total tasks, total solved tasks, and total score.

The first is loaded during contest's lazy loading and defaults to 0.

The next two are calculated in Fetcher::updateDataSubmitsStats() --- we iterate linearly through the list of final submissions and calculate wanted stats. These stats are available as soon as the first getSubmissions() or smallSubmissionsUpdate() are called.

It's worth noting that the Fetcher won't calculate stats for FetcherData objects that are not loaded (e.g. round objects before lazy loading).

Merge request reports

Loading