ENH: Event Manager rework

The event manager is a way to allow functions to be called when certain datetime conditions are present.
This is to eliminate the need got `get_datetime()` checks in the `handle_data` function.
This piggybacks off the work and usage research of @humdings.

Opening this pr now to get some eyes on it before continuing with tests.
I think this won't work if the user subclasses TradingAlgorithm and overrides `handle_data`.  The user shouldn't have to know how their `handle_data` is being called.