refactor entity movement to use fewer functions

It was mentioned in a conversation that the entity movement code is too complex.  There are a number of reasons for this mainly dealing with Driftwood's Pokemon-style movement wherein entities must end their movement on a tile and only one move may be taken at a time.

The old code was split across many functions that didn't have good names, making it hard to read or change.  The control flow was hidden.

This new code should improve things slightly.