Drop target collision detection

Instead of using the pointer_event_catcher to activate drop targets,
activate the drop target closest to the mouse that overlaps the dragged
element.

As an optimization, only drop targets visible in the viewport are
checked for overlap. The list of visible drop targets is refreshed on
scroll.