(PE-2675) Change the order that filters are applied for events

    When using the `distinct-resources` flag of an event query, the
    previous behavior was that we would do the filtering of the events
    *before* we would eliminate duplicate resources.  This was not
    the expected behavior in many cases in the UI; for example,
    when filtering events based on event status, the desired behavior
    was to find all of the most recent events for each resource *first*,
    and then apply the filter to that set of resources.  If we did the
    status filtering first, then we might end up in a state where we
    found the most recent 'failed' event and showed it in the UI even
    if there were 'success' events on that resource afterwards.
    
    This commit changes the order that the filtering happens in.  We
    now do the `distinct` portion of the query before we do the filtering.
    
    However, in order to achieve reasonable performance, we need to
    at least include timestamp filtering in the `distinct` query; otherwise
    that portion of the query has to work against the entire table,
    and becomes prohibitively expensive.
    
    Since the existing timestamp filtering can be nested arbitrarily
    inside of the query (inside of boolean logic, etc.), it was not
    going to be possible to re-use that to handle the timestamp filtering
    for the `distinct` part of the query; thus, we had to introduce
    two new query parameters to go along with `distinct-resources`:
    `distinct-start-time` and `distinct-end-time`.  These are now
    required when using `distinct-resources`.
    
    This functionality is fairly specific to PE and should probably
    be separated into a PE-specific query endpoint in the future.