schedule function offsets

Makes `AfterOpen` an offset from the actual market open, not from the first bar of data for a day.

Prevents offsets of 0 from being passed to `AfterOpen` or `BeforeClose`.
Is this related to the offset change?  Are we expecting dts without a tzinfo, or are we trying to convert to utc here?  If the latter, should we use astimezone instead?  Yay python timezones...