RFC: remove global dispatcher requirement
A first step towards better threading support would be to remove the global dispatcher - that will allow a more library-like use with fewer mutable globals and better control over which dispatcher is used when, less reliance on undefined init order and a bunch of other subtle improvements.

Practical downside is that a few other "constructor" api get an extra dispatcher argument.

The change can be introduced gradually by first removing internal usages of the dispatcher, then slowly deprecating the affected functions.