The Preview delays starting the event loop as much as possible, simply
because our backends may panic/crash when they are not happy with the
UI configuration state they get started in.
So keep this... but use the `sender` in the Cache as an indicator of "we
have a UI". So explicitly set/reset the sender as the UI comes and goes
and do less implicit setup otherwise.
This should make it simpler to actually unify the WASM binaries of the
previewer and the LSP in an extra step.
Turn the PreviewApi into a trait object for easier use and
documentation.