For some reason (I could not reproduce this in unit tests alas), the unsubscribe function
could be called several times in a row, leading to a complete map freeze.
Closes#1736
A great deal of the complexity of the current code is that we must chain
2 reactive values (one in the map "GameScene.MapPlayersByKey" and one in
the snapshot store).
The new generic MapStore class can be used to listen to stores inside a map.
When the store inside the map, or the map itself is modified, the
resulting store is updated.