Detaching drag initiation from the delegate avoids mouse events
getting dropped as hover-enabled items move in response to the
drag (as a bonus it will also avoid a crash in case of a sycoca
update mid-drag).
This version is a mostly-from-scratch reimplementation of
the Plasma 1 version.
Some minor-in-scope loose ends are left, both external and
internal to the code; check TODO for whether your issue is
already known.