This MR fixes seek in VRChat by copying the sequence of flushes/stop/starts that Windows does. The order on Windows is: 1. Stop sources; 2. Flush MFTs; 3. Start sources; 4. Request output down the chain of sink inputs; 6. Flush sinks; and 7. Start the clock This takes place whether we pause before we seek or seek without pause. Changes in version 2: 1. Add test to see when SAR requests new samples; 2. Add test to examine when step 4 from above takes place; 3. Adjust the seek implementation in `mf/session.c` to match findings from the new tests; 4. Adjust `mfmediaengine` to reflect findings from the new tests; 5. Refactored `if` statement in `session_start` to be a `switch` again -- v6: mfmediaengine: Request sample if we are seeking. mfmediaengine: Don't perform implicit flush on state change. mf: Don't send MFT_MESSAGE_NOTIFY_START_OF_STREAM when seeking. mf: Restart transforms and sinks on seek. mf/tests: Test sequence of calls during a Pause and Seek. mf/tests: Test when SAR requests a new sample. https://gitlab.winehq.org/wine/wine/-/merge_requests/7932