Refactored forced move

Forced move now uses forced move classes. I've implemented simple ones
for straight directions, but in theory they could be used for more
complex tasks that require the user input to be halted while they are performed.