Correctly initialize schedulers on startup

This PR fixes a number of bugs around how we initialize RxUI. While our new type-detecting approach is *way* better than what we used to do (especially in places like VS Addins), some of the policy of how it *should* work was lost.

## A Few Things that Should Be True™

* The DeferredScheduler should be CurrentThread in a Unit Test Runner
* The DeferredScheduler should be CurrentThread if there is no platform DLL, and we should warn the user about it.
* The TaskPoolScheduler should always be TaskpoolScheduler. It seems like it should *also* be CurrentThread, but this often ends up with deadlocking unit tests in real-life scenarios.
* The Portable RxUI can't reliably detect unit tests or design mode, we have to leave that to the platform DLLs.

## The biggest breaking change on the planet

This PR renames DeferredScheduler, the dumbest name in the world, to MainThreadScheduler. Infinity better, but will also require Infinity Renames to get existing apps into shape.

## TODO:

- [x] The DeferredScheduler should be CurrentThread if there is no platform DLL, and we should warn the user about it.