create new eventHandler option to do your own event triggering

This patch is meant to be a generic implementation for 3 enhancements:
 1. In GTM, you can use names other than dataLayer, but this code previously only looked for dataLayer.
 2. Your GTM setup may use different key names for events, so this adds support for mapping your events to a custom format.
 3. You may not have any of the currently supported tracking frameworks. This allows you to fire events to whatever framework you have.

*I considered adding a issue to discuss, but it was simple enough I figured it would be worth having the code in front of us to discuss.*