Drop refactor and improvements

This is what is done internally for drops:

 - `dragMove` calls `getDrop`
  - `getDrop` calls `collectDrops` if it is the start of a drag or the [`dynamicDrop`](http://interactjs.io/docs#interact.dynamicDrop) setting is `true`
    - `collectDrops` returns all dropzones that will accept the draggable
  - `getDrop` uses the collected drops to check for an actual drop
  - `getDropEvents` is called
    - appropriate event objects are returned
  - `"dragLeave"` and/or `"dragEnter"` events are fired if applicable
 - `pointerUp` during drag calls `getDrop`
  - `getDrop` does as explained above
  - `getDropEvents` is called
  - `"dragLeave"`, `"dragEnter"` and/or `"drop"` events are fired if applicable.