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
  - `"dragMove"`, `"dragLeave"` and `"dragEnter"` events are created and fired if applicable
 - `pointerUp` during drag calls `getDrop`
  - `getDrop` does as explained above
  - a `"dragLeave"` or `"dragMove"` event is fired if applicable. (TODO: A `"dragEnter"` event should be possible here)