Disable viewing candidates or leaderboard for non-public categories
Prevent votes for competitions in non-public categories
Throw an error in Competition.record_votes if competition already voted on
If a user manages to submit a POST request to the vote view with an invalid value, it's actually generally not an already-voted situation (which will 404 instead) but a hacking attempt.  But we'll be nice about it anyway and just say we couldn't process the request, and return a 205 (reset content) status code, which prompts the user agent to refresh their cache of the form.
Competition.objects.generate() isn't useful in a world with mandatory categories
Prevent generation of Competitions from candidates in non-matching categories
Version bump