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).

My attempt at tackling #2196 and #1107. @danzel @luiscamachopt thoughts?