task versioning: create SubmissionResult class/table for per-dataset results.
Don't allow active dataset to be deleted.
Convert task.datasets to dictionary instead of list.
AWS: Check uniqueness of description and error gracefully.
AWS: Fix automatic data set activation bug.

The dataset_version is not known until commit, so we can't use it until then.
AWS: Fix for new datasets collection type.
AWS: Log some generic exceptions to aid debugging.
Minor database fixups.
Add helper function to lookup, and if necessary, create SubmissionResult.
Make Evaluation be dataset-specific.
A mass of changes to use SubmissionResults where required.
Fix uniqueness constraint on evaluations.
ES: Make idle loop aware of dataset versions.
Typo fix in comments.
Remove superfluous default arguments to get().
Fix more places where SubmissionResult must be used.
Fix primaryjoin statement for active_dataset.
In enumerate_files(), get executables from submission results.
Provide Contest.get_submission_results() and use where required.

This is a more efficient means than loading each submission and its results
separately.
AWS: Provide dataset-aware interfaces for submissions and tasks.