Fix registration to Interface when protocols define a method called 'register'
Add CachedAdapterFactory to trait.api
add 'isinterface' function to safely check if a class is an Interface

issubclass(klass, Interface) is not safe: Interfaces are ABCs, to
any call to 'register' makes that statement True