Introducing reward points

Adds reward points as requested in #311.
*Includes migrations.*

- A new app ```rewards``` holds models for granting and redeeming reward points as well as redemption events.
- Students automatically get a number of reward points (customizable in the settings) when they finish the evaluation for the current semester, but *only if the ```grant_reward_points_after``` date is reached*. This is necessary because there are courses like welcome days where the evaluation ends before any enrollment data is imported. To prevent users from already getting reward points when this course was evaluated, the mentioned date was added to the semester model.
- External users don't receive reward points. The UserProfile now has the field ```is_external``` which is automatically set during the import based on the user's email address.
- Staff users can create ```Reward Point Redemption Events``` and specify, when the points can be redeemed for these events.
- Students now have a ```Rewards``` page (accessible via the main menu) where they can see their reward points history and where they can redeem points for all available events.
- Staff users can export all redeemed points per event into an Excel file which holds the respective users' first and last names, their email addresses and the number of points redeemed.
- Staff users also have a per semester overview about all (non-external) students who are enrolled in courses, which shows how many of their courses they already evaluated and whether they received reward points.
you could say `participants = set()` and not do the set conversion here. also, wouldn't it be more correct to sort after the first name as well?