Don't move the player if nothing has changed

To avoid repeated calls to events ( for example, repeating "denied"
sounds from pressing against a locked door ), the player is only moved
if something has changed:
* New move  ( different direction )
* Same move ( after no movement )
* Same move ( if tile changed )

"Move" means attempted move -- the player can still be blocked, but the
on_over event for the tile is only triggered once.

I added a _has_changed flag to the Map_Tile class that is set when any
of its fields are changed.