Mark TODO as such.
SS: missing import of Task.

I don't know how things managed to work, but definitely we want
to import Task if we use it (kind suggestion by pyflakes).
Add TODO.
Optimize dropping the whole database.
Sample config: use "python2" instead of "python" as process_cmdline.

"python2" is expected to be more common, since it is used in all
shebangs.
Unit tests for logservice.
Renamed RunTests to RunFunctionalTests.
Partial pep8 on cmstestsuite.
Running unit tests automatically.
Add Serbia in the testimonials list.
Add JOI Open Contest to testionial list.
Add version information to exported contest dumps

And support automatic dump updates, either on-the-fly or on-disk.
Fix a bug in TwoSteps

TwoSteps was using "foobar.lib.pas" and "manager.lib.pas" as filenames
for Pascal headers, instead of "foobarlib.pas" and "managerlib.pas".

This commit fixes this and introduces a symmetric solution for source
files too, that stops assuming that the language name is the file
extension.

Also, all language and extension related constants were moved into
cms.__init__.
Innocent fixes to ES
Innocent fixes to Job

Mostly aesthetics.
Innocent fixes to TaskType

Remove some unused attributes.
PEP8
Unify initialization of TaskTypes and ScoreTypes

Simplify get_{task,score}_type by making them accept as parameters,
respectively, task_type_name and task_type_parameters for TaskTypes and
score_type_name, score_type_parameters and public_testcases for
ScoreTypes. Alternatively one can give a dataset, that already contains
all this information as attributes.

Also provide separate functions, get_{task,score}_type_class, to get
only the {Task,Score}Type class given its name.

This means that the constructor of TaskType won't get the Job and the
FileCacher. Parameters can therefore be easily stored and accessed in
TaskType.parameters, whereas Job and FileCacher will be given as
parameters in the call to .compile() and .evaluate(). They'll be local
variables and not object attributes. This way a single TaskType instance
can be used on more than one Job.

Also note that:
- task_type_parameters will be JSON-decoded inside get_task_type, and
  not inside methods of Job.
- create_sandbox doesn't need to have access to the full TaskType but
  only to the FileCacher
Reorder some class definitions in cms.db

Put them in the order they come into play in the contest execution:
- in Task.py: Statement, Attachment, SubmissionFormatElement, Dataset,
  Manager and Testcase;
- in Submission.py: Submission, File, Token, SubmissionResult,
  Executable and Evaluation
- in UserTest.py: UserTest, UserTestFile, UserTestManager,
  UserTestResult and UserTestExecutable

Also reorder some fields inside some classes.
Identify Testcases with a string codename [1/3]

Rather than by an integer index.

Also bind each Evaluation to its Testcase using a foreign key and a
relationship, instead of relying on them having the same codename. This
way Evaluations will be deleted when their Testcase is, and there's no
risk that their names go "out of sync".