DragInteraction callbacks for dragstart, drag, and dragend

Working towards #365, and realized I needed this.

This takes care of #630 too.
this is gonna be inconsistent with how `DragInteraction` works, ie it returns `[origin: {x: number, y: number}, location: {x: number, y: number}]`. id rather stick to simpler interfaces where possible