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.
This isn't strictly required, but there should be no gaurantee or
requirement that the references are equal in these checks, so it's best
change them as such.