Save and restore window size and position.
New TODOs.
Animate movement of boxes.
Qbs build file.
Use UDLRudlr notation for undo.
steps and pushes shouldn't be writable.
Removing Level::serialize.

In its current form it's not useful(nor used) and will make planned refactors
more dificult.
Refactoring separating board and level.

This creates a more clear separation between model and controller.
The Board is only holds information to be displayed by QML, while level
enforces the rules of the game. This will make it easier to further
refactor both and to implement a more robust undo/redo mechanism.
Refactor Box to have QPoint instead of x and y.

This makes usage of the class easier since most elsewhere positions are
handled with QPoint.
Do level parsing in a single stage.
Removing unused include.
Use list instead of vector of vector for tiles.

Since GridView expects a single dimensional model there is no point
in having a 2 dimensional sotrage of tiles.
Use Repeater instead of GridView to display map.

The GridView made item positioning less clear and nescissated more code.
Simplify Box API.

Since it was always asked to move in both x and y, it simpler to
recieve a QPoint as the delta. The delta used by Level is always moving
in just one direction but writing ifs for it makes for unnecessarily
complexity in the code.
Use qmlRegisterUncreatableType to expose enums.

Board and Level shouldn't be created from QML. Their default
constructors didn't make sense.
Don't fight against Qt object model.

Use game as parent of level collections and settings, and level
collection as parent of level to ensure their destruction.
Make Level constructor explicit.
Remove uneeded metatype declaration.
Make LevelCollection not importable.

QML needs to be able read currentCollection property of game but not to
import or instantiate LevelCollection.