Closes https://github.com/ppy/osu/issues/27589.
Follows osu! spinner precedent in storing the holding state to the
judgement result rather than attempting to keep it in the DHO (which is
prone to getting dropped on pool re-use).
We've seen multiple cases where DrawableHitObject are stuck in the lifetime management container
due to not implementing a judgement (meaning they are never "hit" or "missed"). To avoid this going forward
CreateJudgement() must be implemented and return a non-null judgement.
This fixes BananaShower and JuiceStreams in osu!catch.
This also makes HitObject abstract and cleans up convert HitObject implementations.