LibraryView: support updating tracks in Library
- Create insertionIndexFor() function that calculates where a new item
  would be placed in the table. Encapsulates old behaviour of sorting.
  If parent is not expanded (i.e. item should not be inserted at all),
  NSNotFound is returned.
- Updated tracks:
  - If current_index != index we would insert it at:
      track is moving, so we delete it and re-insert.
  - Otherwise: no movement, and just refresh
      (this is always true of albums/artist, because their names never
      change. Worst case they are deleted and recreated for a change)
- Change to sorting - we stop the insertion index calculating loop when:
  OLD: the item we are to insert is < item at index
  NEW: the item we are to insert is <= item at index
  For inserting new objects this should not change anything, as artists
  and albums should not have duplicated names. It could affect sorting
  of tracks that have the same track#. However behaviour of this is
  currently undefined.
  This changed was needed for updating tracks, where we can put an
  already existing track into insertionIndexFor() and have it return
  the same index if it should not move. Prev, it would return index+1.
- Closes #7
LibraryView: consolidate code in receivedLibrarySavedNotification:
- do the CoreData thread conversion here instead of passing ObjectIDs
  and letting receivedLibrarySavedNotificationWithChanges: do it
- Also do the LibaryMonitoredFolder filtering here too.
LibraryAlbum/Track: avoid unnecessary pruning
- Only call prune if the album/artist changes. Before we would prune it
  too early so that the album/artist might be deleted and recreated.
- prevents disappear/reappear in LibraryView if track is updated