use constructors properly and handle 1 size and below boards better
refactoring, mostly for readability
invert silly validMove conditional