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.
override null config with parent's config
use `parent=self` throughout IPython

instead of `config=self.config`

only real effective change: IPythonKernelApp.parent has been renamed to IPKernelApp.parent_handle.
don't use parent in launcher tests