Make visitor's Visit's non-constant
Rework sprite manager

SpriteManager is now capable of loading sprites on its own, which
greatly simplifies sprite handling in Renderer. Batch loading is
now also supported and it works optimally by grouping sprite loading
by datfile resource (e.g. no double unpacking and decoding).
Convenient sprite classes were added which now handle animations,
directional sprites and other stuff, and provide Render methods which
no more requires holding reference to SDL2pp::Renderer.

Regression: jungle strike is temporary not supported
Add OneShotAnimation, fix signedness in sprites
Implement hydra and hellfire weapons

Speed still need to be tweaked as well as start position
Implement fallback Visitor::Visit()
Rework animations

Fix design error: Sprite can not hold animation state as there's
only one Sprite per Renderer. Animation should instead be handled
solely by Renderer and be based on object's state such as age.

Turn both LoopAnimation and OneShotAnimation into single Animation
class, properly use it in Renderer, add age to Heli to properly
animate its rotor.
Remove unneeded forward declarations
Clarify what's loading
Implement explosions

Explosion object have fixed age limit and destroy themselves when
their time runs out. While still alive, information on their lifespan
is used to render animation.
Spawn explosions when projectiles hit the ground
Merge Hydra and Hellfire into single Rocket class

As their behavior is identical