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.
I only briefly skimmed this code during implementation becuse I assumed
it was doing what was already proven in old song select.
Turns out it was not. And it was iterating and LINQing its way to death
(multiple seconds for <1000 beatmaps).