Rooted vehicle movement (#13342 for example)

Corrects issue where certain combinations of actions would cause vehicles (usually cannons/artillary) that should be rooted, to be fully movable.

This needs some discussion. Since, there's quite a core change happening here (check WorldSession).

Essentially the issue was that the worldsession protection against spoofed packets assumed that the client would never send movement info, when rooted in place. However, when in a vehicle that is rooted - they client does sent movement messages (for a very short time after first entering, normal movement is sent, and all the time turret aiming counts as movement).

To that end, I added the proviso that if the player is in a vehicle and database for the player has unit status disabled movement on, then it will not remove a root if it receives movement commands for the rooted unit.

Elsewhere there's a bit more enforcement of root state. Applied on entry, only removed on exit if the unit doesn't have restricting movement flags. Also in ApplyAllImmunities (I think I may try removing this one).

Please test this yourselves and spot anything obvious.

I also think the change in world session could do with some cleaning up. But, I wanted to also get some outside testing/opinions about the solution in the meantime.

Of course, this will do nothing, unless you update your creature templates with unit_flag 4. :)

The cases I knew of that previously caused the failure I've tested for (on the DK scarlet cannon only so far):

 - Logging out while in the cannon
 - Switching player after combat
 - Gaining combat and then leaving cannon while in combat.
This is the point though. If you put debug logs here, you'll see it fires over and over when the user is aiming the turret in a cannon for example. This point I've raised here already and the comment makes clear the intention.

So, perhaps in most cases the client wouldn't send commands when a player is rooted. But for rooted vehicles it does, and this falls foul of this code, which releases the root.

Hence, it specifically makes an exception if on a vehicle. It's the crux of this PR and I cannot see any other way of solving the issue on a core level (without making various hacky tricks elsewhere).