Fast universal event propagation

Makes adding layers to `FeatureGroup` and propagating events 10x faster while making it universal (propagates any events, and we can easily add propagation to other classes if needed). All children like `GeoJSON` and `MarkerClusterGroup` will benefit from the speedup as well.

This is my attempt at tackling #2196 and #1107. @danzel @luiscamachopt thoughts?