RF: Removing is_adjacent and making new_pos and diff_pos pure, non-throwing functions.

This means that the output from diff_pos is not guaranteed to be a valid
move (which in fact was never true anyway) nor is the output from
new_pos guaranteed to be inside a maze (which has been only
coincidentally true due to the way our mazes were defined with a one px
wide border).

The only accepted way to check whether a move is valid is to ask the universe
about it.