Split filter and find calls for improved performance

I split up filter functionality into two functions: filter and find. A filter call assumes non-overlapping time intervals, whereas find takes each time interval and copies the events in that interval. I'm not stuck on "find" as the best func name here, but I think we should see a performance difference on larger data sets.