improved automated movement

actions such as move commands are stored in a queue with add_action()
and handled by by perform_actions(). after each action is performed, it
is removed from the queue.