Fix memory leak where expired effects weren't removed from EffectIndex.
Merge branch 'master' into decouple-gfx
Create a ModelObject interface to manage and update objects' lifecycle.
Add an invalidate method to dispose of model objects.
Call advanceTime instead of update on projectiles.
Update Player to implement ModelObject.
Push down implementation of the ModelObject interface to Entity.
Eliminate isAlive for projectiles and exhaust as it's been superseded by ModelObject.isValid.
Effects now implement ModelObject.
Transform ModelObject into an abstract base class to reduce code duplication.
Prize is now a ModelObject.
Remove deprecated update function in PrizeIndex.
Move Prize into the model namespace.
Move Entity into the model namespace.
Move Effect into the model namespace.
Move Player into the model.player namespace.
Move LocalPlayer into the model.player namespace.
Move RemotePlayer into the model.player namespace.
Move Projectile into the model.projectile namespace.
Move Bomb into the model.projectile namespace.