Use an AutoResetEvent instead of a Monitor in TestScheduler.WithScheduler

This prevents `TestScheduler.WithAsync` from throwing a SynchronizationLockExceptionObject exception, because we can't `await` inside a Monitor