Optimizations and code cleaning

The main move piece method of Board now has all the error checks first, so
the meat of the method isn't stuck in a if/else block. Helps readability.
there's some code in there to do checks and maybe even check mates. Idk. fuck it.