grading: some fixes to Job

Add the language to ExecutionJobs too (could be useful in the future for
interpreted languages), sort the fields to give them some sense (the
order should now be the one in which the fields are used/generated
during the compilation and evaluation process) and use an internal
namedtuple instead of abusing the Testcase DB class.

This improves the previous commit.
grading: fix a nasty subtle bug in the evaluation process

The whole issue lies in TaskType.py:237. It's iterating on the numbers
from zero (included) to len(testcases) (excluded) assuming that these
are the Testcases' nums. That's not true in general. Even if we're using
an OrderingList for dataset.testcases we have no guarantee that the nums
form a contiguos sequence (i.e. they don't have holes). For example,
deleting a Testcase via AWS doesn't load the OrderingList at all and
therefore doesn't preserve this property.

The test_number generated on that line is then given to the TaskType
that uses it as the num for the Evaluation, causing troubles for
ScoreTypes during the scoring phase because of mismatches with the
public_testcases.

To properly fix it I decided to make job.testcases become a dict with
int keys. This will not change the syntax used to access a testcase and
will thus make the existing code continue to work, but it will allow us
to give the correct test_number to TaskType.evaluate_testcase.

Note that this bug was NOT caused by the previous commit.
CWS: small fix

The bug was introduced in 2c9a82907b8d11dfc0e9cbaeaabb61201e3f0a13.
AWS: small fixes, whitespace and pseudo-PEP8

Not giving the parameter to the constructor of DB classes already sets
it to its default value: no need to be explicit.

Try to use a consistent style in most of the handlers: start by getting
the objects whose IDs are given by parameters, define self.contets as
soon as possible (as it could be used by the error handler), conclude
with try_commit and redirect differently based on its result (if
appropriate) and put the things "to do" between these two blocks,
separated by blank lines to highlight it.

Move all assignments for the "reevaluation_buttons" parameters together,
to highlight explictly where they're actually used (this becomes more
inefficient, since they're assigned many times with the same values, but
assignments are so simple that it shouldn't matter).

PEP8 states: "avoid more than one space around an assignment (or other)
operator to align it with another". I think this also applies to spaces
after commas in a list of tuples. And, anyway, what we had wasn't a real
alignment...
RWS: small fix on the client-side interface
Use a different format for ContestExporter/Importer

The new format isn't "tree-like" anymore but, instead, it's a dictionary
whose values are all exported objects and whose keys are the associated
IDs. The IDs aren't the ones they had in the DB before exportation nor
the ones they will have after importation. They're IDs whose scope is
just the one of the exported data, and they're global IDs (unique among
all classes). This allows us to export complex relationships, and not
only trees. Moreover we are able to write a general method that does
this for all classes and all relationships, avoiding the hacks we used,
for example, when exporting submissions.

With this commit ContestExporter doesn't use .export_to_dict() methods
anymore and ContestImporter doesn't use .import_from_dict().
Rewrite YamlImporter
Rewrite YamlReimporter
Remove all specialized export_to_dict and import_from_dict methods