Processes a user event.

        :Parameters:
            user : `hashable`
                A hashable value to identify a user (`int` or `str` are OK)
            timestamp : :class:`mwtypes.Timestamp`
                The timestamp of the event
            data : `mixed`
                Event meta data

        :Returns:
            A generator of :class:`~mwsessions.Session` expired after
            processing the user event.

def process(self, user, timestamp, data=None):
        """
        Processes a user event.

        :Parameters:
            user : `hashable`
                A hashable value to identify a user (`int` or `str` are OK)
            timestamp : :class:`mwtypes.Timestamp`
                The timestamp of the event
            data : `mixed`
                Event meta data

        :Returns:
            A generator of :class:`~mwsessions.Session` expired after
            processing the user event.
        """
        event = Event(user, mwtypes.Timestamp(timestamp), self.event_i, data)
        self.event_i += 1

        for user, events in self._clear_expired(event.timestamp):
            yield Session(user, unpack_events(events))

        # Apply revision
        if event.user in self.active_users:
            events = self.active_users[event.user]
        else:
            events = []
            self.active_users[event.user] = events
            active_session = ActiveSession(event.timestamp, event.i, events)
            self.recently_active.push(active_session)

        events.append(event)