Buffer pending frames and retrofit the timestamps
This sits on top of !113 (merged)
Two changes here:
- keep device events in a separate "pending" device-specific queue until we get a frame event. Then shuffle those events into the main event queue so we can guarantee (to the caller) that we always have a full frame available in the event queue.
- since we now buffer the frame, we can simply apply the frame's timestamp to all currently pending event, providing a bit more convenience to the caller