Work in progress: create a plugin architecture for things to fit in

Probably not quite ready yet, still lacking some test coverage, but almost there.

If the `self.core.session_for_tenant_id` dint already have the `tenant_id`, this call fails with a 500. This should be changed to create a session with `tenant_id` and `username` and then update the session if `token` and `expires` when `get_service_catalog_and_token` or `get_impersonation_token` are called.