Implement per-season leaderboard
This MR implements all the logic required to have leaderboard that are per season instead of one only leaderboard. It does so by looking up for each event the relevant season and deciding based on that which score method to use. The score for each season is cached independently, but it is invalidated for all season when there is a new result. The new leaderboard are available at unityleague.ch/ranking/2024.
This also adds a skeleton for the 2024 score, but an incomplete one as I don't have the full specification yet. I think @jari should have it, and once this gets merged, you can add the missing score features.
I will monitor how the latency changes for computing scores with this, but I expect it to be relatively cheap.
Note that the URLs for the new leaderboard are still hidden; you can access them but there is no link to it. This is because I don't want to make it public until it is ready.*