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).
There's early exit logic in `OnPressed`/`OnReleased` for the sake of
keeping order correct, but this doesn't account for the fact that
`DrawableHitObject` resets all animations when the hit state changes.
A bit of an ugly workaround, but seems to work as expected.
I think we're going to have to change this as it's quite limiting in
what you can do with osu!mania skin implementation, but for now I want
to leave a note as to why this is done, because each time I have to
trial and error check what breaks when adjusting it.
To correctly end a mania hold note, `endHold()` needs to be called. This
was not happening in a very specific scenario:
- The hold note's head is not hit
- The user pressed the column's key within the hold note's tail's window,
but does so to hit the next object (a note in proximity to the hold note's tail).
- The hit policy forces a miss on the hold note, but `endHold()` is not called
- `CheckForResult` is not called after this point due to `Judged` being `true`.
Closes#21311.