Crazy Update

Rebuilt the move determination functions so they should actually be
working now. Phew... I hope. :(

Rebuilt most of the inner loop for the actual game because I now
actually care about whether or not you're entering in a valid move
placement. Funnily enough, when you enter an incorrect or invalid tile
placement the algorithm can't deal so things get weird.. Crap in == Crap
Out. -.-

Adding a squillion helper functions to make everything easier to deal
with. I suspect a lot of these exist in some for or another in core
already so that is a TODO for another day...

Still no victory conditions or score just yet... and you can only quit
if you enter 'Q' or 'q', which was fun in the REPL.. ><

Ah well, mad progress all round though, so yay.