ENH: new api method: add_event

This is another version of a time/event management api.

This version allows users to schedule functions to be called with (context, data) args at frequencies other than the backtest frequency. Right now the functions are called before the regular handle_data routine, but after could make sense, it would allow people to set context variables.

Example workflow
```
def func_a(context, data):
    # stuff
 
def func_b(context, data):
    # other stuff ...

def func_c(context, data):
    # ...
 
def initialize(context):

    # Set functions to be called every 20 min
    add_event(freq='20T', functions=[func_a, func_b])

    # For once/day events, specify a 'when' function
    add_event(time_func=BeforeClose(minutes=5), functions=[func_c])
 
def handle_data(context, data):
    # Nothing to be done
    pass
```
I believe right now the tests select the test dates at random, does that count as testing both sides, I'm not sure if that's bad practice? I'll make sure the test gets both seasons every time though.

The value get converted on line 107 in the `__call__` function. It's only storing the timezone, and converts any dt passed in into that timezone. I used `dt = self.tz.normalize(dt)` , where dt is the algorithm datetime.  I believe this was working, but I will take a closer look.