Shared player health

All players now have a shared health. In the current implementation,
if the previous player is injured, the current player will only
'show' the injury after they 'see' the previous player being injured
(that is, the health will eventually be correct, but immediately following
time travel, the player may appear to gain health).

Player health is stored in the state under the key "health".

All functions that manipulate entites in the state must now
check that the entity has a numeric key: if it has a non-numeric
key, it is not an entity.

We keep the state as a 'flat' table rather than making it a first-class
object largely because deep table copies are error-prone.

Player damage is propagated to the state indirectly via the Player:tick
function.