CAUTION: Includes a schemamigration. Adding two new models that inherit the same abstract model.
- SubmissionRuleDeviation (abstract)
- DeadlineRuleDeviation
- MaxSubmissionsRuleDeviation
Submission.is_submitted_late now takes the DeadlineRuleDeviations in to account.
Merge branch 'master' into submission_exceptions
Admin for DeadlineRuleDeviation.
Added some convenient methods as well as related_name for SubmissionRuleDeviation's exercise.
Merge branch 'master' into submission_exceptions

Conflicts:
	exercise/exercise_models.py
- Moved the code from Submission.is_late to BaseExercise.is_open_for as it needed to be invoked from BaseExercise.is_submission_allowed.
- Added when keyword argument with default of datetime.now() for many methods that compared times with the current time so that it would be possible to use the same current time when these methods are called paralelly during the request.
- Some code formatting in BaseExercise.is_submission_allowed to follow PEP8.
- Comment refactoring for Submission._set_status
- Added a bunch of methods to BaseExercise that are related to the max_submissions and MaxSubmissionsRuleDeviation.
- Rewrote the parts of the BaseExercise.is_submission_allowed that considered the submissions_left check.
- Also some PEP8 refactoring near the changed and new code.
- Removed some unnecessary imports from submission_models.
- Added MaxSubmissionsRuleDeviationAdmin.
Merge branch 'master' into submission_exceptions
The comma separated list of submitters' first names and first letter of last name has proven to be not very useful so it is changed to include the last name as whole and also student_id in parantheses if it exists.
Refactored SubmissionAdmin for better usability.
- Removed the has_submissions_left as it was confusing when also considering the presence of have_submissions_left. To check has_submissions_left, call have_submissions_left with students as list of just one student.
- Improved the error messages.
- PEP8 for every method I touched.
- Removed the clean method of SubmissionReviewForm as it didn't do anything. The max_points will always be None so the if-statement will never evaluate to true. The points < 0 check is done by the IntegerField anyway.
- Added help_text to the SubmissionReviewForm.points
- In the submission_assessment view, the set points is called with the new no_penalties argument so points of the manual assessment will be set to the Submission exactly as given.
- Submission.set_points now supports no_penalties arguments. If no_penalties=True is given, the set_points will not apply late_submission_penalty to the given points.
A small correction.
Merge branch 'master' into deadline_deviation_without_ui

Conflicts:
	exercise/exercise_models.py
Merge branch 'master' into improvements_for_assistant_workflow
Merge pull request #92 from Rubinous/deadline_deviation_without_ui

Deadline and MaxSubmissions deviations without ui
Merge branch 'master' into improvements_for_assistant_workflow

Conflicts:
	exercise/admin.py
Merge pull request #96 from Rubinous/improvements_for_assistant_workflow

Improvements for assistant workflow