Move game-related signals out of MainWindow, into the new dedicated class GameSignals
GameSignals: simplify slightly
RackWidget: update the visual rack only when the game rack changes.

This avoids losing the state when any unrelated update happens in the
game (for example when clicking on the board to set the coordinates).
MainWindow: fix bugs introduced in 99e7628fed66
TrainingWidget: fix an old bug (the "New rack" button was behaving like "Complement")
Rack: add operator==()
Game: remove a TODO
GameSignals: emit the gameRackChanged() signal even if this is not the last turn
GameSignals: new signal emitted when the rack of the current player changes.

We connect this signal to the RackWidget, which allows a more intuitive
behaviour (in particular, the visual rack is now updated when the
Shuffle button is clicked).
Topping:: allow shuffling the rack
RackWidget: only allow drag & drop if there is no preview on the board
RackWidget: after a drag & drop, notify the game that the rack has changed.

This allows synchronizing all the controls displaying the player rack
(visual and textual ones).
RackWidget: restore the rack properly if drag & drop fails
GameSignals: update member variables correctly when the game is destroyed
RackWidget: fix a bug when the rack is filtered (wrong variable used)
Board: allow one more type of invalid word when previewing a played word
TimerWidget: new "chrono" mode, triggered with Ctrl+click
TimerModel: add a utility method
HintsDialog: display the cost of each hint (optional)
Topping: remove the ScoreWidget and add a TimerWidget