I considered having this just be a straight guard followed by an
early-return, but if that guard ever actually gets hit, things are going
to be severely broken all over, and un-breaking them at that point will
be very annoying, so just going to cross fingers and hope this can be an
assertion forevermore instead.
This also allows *all* panels to be re-used based on equality, as
originally intended. Beatmap updates should be handled correctly without
a full (flashing) recreation of panels now.
This is a minimal implementation in order to keep moving forward.
For simplicity I've copied over the old implementation verbatim. Note
that this is beatmap*set* based randomisation, which means that when
panels are split up by difficulty, it is still randomising by set (with
the difficulty choice being left up to the user recommendation system).
I think this is what we want, but if it isn't, any changes can come
later.