core: split out LegalMove as independent bool function, rename LegalMoves to LegalMoveSlice