dataengine: do not emit removal signals while iterators are open
this likely caused connect-based call chains into client code that would then mutate the underlying container such that the iterator goes invalid mid-removal resulting in a crash.
to solve this simply emit the signals all in one go initially, before iterating the sources for removal
(only applicable to kf5 since dataengine appears removed in master)