Also adds variant to settings
Player checks for HasReplayLoaded in Player.load(), but the replay is attached in ReplayPlayer.LoadComplete(), which is too late.
Plus a lot more implementation.
This is important when using dynamic compiling to rapidly iterate. Until we actually split projects out into pieces (like the abstract ruleset project we have talked about) there is no advantage to using internal in the osu! game code.
Changes to OsuScoreProcessor were required to make sure that ticks and slider heads weren't ignored.