I sorted out multithreaded source shutdown using `CreateThread()`. Windows handles unexpected shutdown without issue when the media source is not wrapped, but with a wrapped source the session fails to raise `MESessionStarted`. It cannot even handle failure of `BeginGetEvent()` with `MF_E_SHUTDOWN`. (The wrapped source works fine without shutdown). This implies that a private interface is used for all cases of unexpected shutdown. Therefore I changed this MR to use a private interface. The work queue changes are no longer needed and can be raised in a separate MR.
For a private interface used internally it doesn't seem necessary to check that the shut-down media source is actually used by the session. It's interesting to note, however that if native Windows validates this it would explain why wrapping the source disrupts shutdown handling.