text: Title: feature request: provider for "self"
  Body: I would like a provider to be able to pass a container as an argument:
  ```python
  class Container(containers.DeclarativeContainer):
  
      foo = providers.Callable(calc_foo, containers.MarkerForContainer)
      bar = providers.Object('hello')
  
  container = Container()
  container.override_providers(container=container)
  
  def calc_foo(container):
      print(container.bar())
  
  container.foo()  # prints "hello" - ?
  ```
  I assume that is impossible to do directly, right now? I guess perhaps I could do:
  ```python
  
  class Container(containers.DeclarativeContainer):
  
      container = providers.DependenciesContainer()
      foo = providers.Callable(calc_foo, container)
      bar = providers.Object('hello')
  
  container = Container()
  container.override_providers(container=container)
  
  def calc_foo(container):
      print(container.bar())
  
  container.foo()  # prints "hello" - ?
  ```
  
  But having the container work without having to put cheese in it (to use a mousetrap analogy) would be great... any chance of something like the former (if indeed it isn't possible)?