text: Title: Enhancement of catalogs inheritance
  Body: Example below should work properly:
  
  ``` python
  """Example of catalogs inheritance."""
  
  import dependency_injector as di
  
  
  class CatalogA(di.AbstractCatalog):
  
      """Example catalog A."""
  
      p1 = di.Provider()
  
  
  class CatalogB(CatalogA):
  
      """Example catalog B."""
  
      p2 = di.Provider()
  
  
  class CatalogC(CatalogB):
  
      """Example catalog C."""
  
      p3 = di.Provider()
  
  
  # `di.AbstractCatalog.providers` attribute is a dict of all available providers, 
  # including current catalog providers and providers that are inherited
  # from parent catalogs:
  assert CatalogA.providers == dict(p1=CatalogA.p1)
  assert CatalogB.providers == dict(p1=CatalogA.p1, p2=CatalogB.p2)
  assert CatalogC.providers == dict(p1=CatalogA.p1, p2=CatalogB.p2, p3=CatalogC.p3)
  
  # `di.AbstractCatalog.inherited_providers` attribute is a dict of all providers that 
  # are inherited from parent catalogs
  assert CatalogA.inherited_providers == dict()
  assert CatalogB.inherited_providers == dict(p1=CatalogA.p1)
  assert CatalogC.inherited_providers == dict(p1=CatalogA.p1, p2=CatalogB.p2)
  
  # `di.AbstractCatalog.cls_providers` attribute is a dict of current catalog providers:
  assert CatalogA.cls_providers == dict(p1=CatalogA.p1)
  assert CatalogB.cls_providers == dict(p2=CatalogB.p2)
  assert CatalogB.cls_providers == dict(p3=CatalogC.p3)
  ```
  