use a ReentrantMonitor instead of a Monitor for the DownloadDevice component

Prevents deadlock when InitializeDownloadMediaList enters the monitor,
then
calls DeleteAllItems, which also tries to enter the monitor
delay the library base components to profile-after-change
fix up MediaItemControllerCleanup and register for profile-after-change