Use DOM event delegation for all layers

Adds `Layer` `addInteractiveTarget` and `removeInteractiveTarget` that implements event magic for all layers using delegate events (propagated to map container and handled there in one place). No more mouse event code duplication, and it speeds up adding lots of markers significantly (no need to add tons of listeners on each individual element). Closes #46 

To Do:
- [x] test extensively to make sure nothing is broken
- [ ] figure out how to pass marker latlng instead of mouse position in marker event data
- [ ] add some tests
Oh no, let's not [reintroduce this](https://github.com/Leaflet/Leaflet/pull/1782).