opportunistic loading of backends
so that all backends don't have to be available to run any of them.
Includes a couple of other cleanup commits as well (don't squash).
so that all backends don't have to be available to run any of them.
Includes a couple of other cleanup commits as well (don't squash).