ClientProviderFactory is aware of InternalClientProvider in system

Add `ClientProviderFactory` as class listener and maintain a list of available `InternalClientProvider`'s. Add unit tests.
Maintenance of the map will be simpler than that of the list