Handle CoreDisc updates

CoreDiscs need to be updated in 3 cases:
1. a song is removed from an album
2. a song is added to an album
3. a song disc number changes

1. a song is removed from an album
This case is already partially handled. Indeed, the song is already
part of the initial list of songs. Therefore, when, the song is
removed from the list, the associated coredisc model gets
updated. However, if the coredisc becomes empty, it is not removed.
This issue is fixed by checking the album model when a CoreDisc
becomes empty ('GrlTrackerWrapper.check_album_disc_changes' is
called).

2. a song is added to an album
In that case, the song is not added to the album (and the
associated coredisc) if the model has already been loaded because the
filter func has not been updated.
This issue is fixed by adding a '_check_album_content_change' method
to GrlTrackerWrapper when a new song is added or changed. This
function checks that the album already exists and updates the album if
necessary ('check_album_disc_changes' is called).
A new CoreDisc may be created, but not CoreDisc will be removed.

3. a song disc number changes
It's almost the same case as the previous
one. '_check_album_content_change' method is also called. In that
case, a CoreDisc may be added and an other CoreDisc may be removed.

This change is based on an initial implementation by Marinus Schraal.
3 jobs for wip/jfelder/coredisc-updates in 8 minutes and 29 seconds (queued for 2 seconds)
latest