Fixed bugs in 2048 implementation and sample algorithms

- End check algorithm rewritten to detect two adjacent equal cells.
- Game_move() generates new number only when move caused a change.
- Game_init() function to initialize matrix and populate it with two
first numbers.
- Refactored population of new numbers to board into separate function
game_populate(), which is used both from game_move() and game_init().
- Corner algorithm takes the first move, that results in change, not the
first move that results in points.
- Replaced random3 algorithm with corner2. Random3 would loop endlessly
with new conditions. Corner2 is almost the same as corner, but it
prefers moves that result in points.
- Greedy algorithm prefers moves that cause change, if there is no move
that results in points.
- All algorithm functions return final matrix of last iteration, in
addition to points.
Some optimizations to algorithms

- Game_init() without arguments generates 4x4 matrix.
- All algorithm functions without arguments do just one trial.
- Corner2 algorithm was changed to swap between first two moves,
ignoring points altogether.
- Greedy algorithm was changed to use first move that resulted in
change, instead of last move. This resulted in noticeable difference in
scores.