Using Stream lazy evaluation instead of List
Made getPossibleMoves a lazily computed sequence