ipython/ipython — pull request #3430 by minrk (2013-06-14 15:04:17+00:00)
Title: add parent to Configurable

this adds the notion of a parent and member config, so the config:

c.Foo.Bar.attr = value

will only set `Bar.attr = value` for `Bar` instances which are members of `Foo` instances. The mechanism for doing this is

```python f = Foo(config=cfg) f.b = Bar(parent=f)
```

This Instance config has higher priority than plain class config for Bar, but still lower priority than direct keyword arg trait assignment.

The main implication this has is to change the standard creation of descendants:

```python self.bar = Bar(config=self.config)
```

into a direct parent expression

```python self.bar = Bar(parent=self)
```

This also means that most Configurables will actually have a handle on their parent object.

It also means that most IPython configurables have a handle on their parent object.
If this is undesirable, we can construct the name list at init, without holding onto the key.