test Config objects from dicts
fix creating config objects from dicts

ensures that sections are subconfigs, such that:

```python
cfg = Config({'Class' : {'trait' : value}})
```

results in the same object as

```python
cfg = Config()
cfg.Class.trait = value
```

Previously, this would not cast the `Foo` dict to Config,
which would cause merges to fail, etc.
make Config.merge a public method

leave Config._merge as deprecated alias.
Merge pull request #3403 from minrk/configinit

fix creating config objects from dicts, make Config()+merge public 

ensures that sections are subconfigs, and that:

cfg = Config({'Class' : {'trait' : value}})
results in the same object as

cfg = Config()
cfg.Class.trait = value

_merge() renamed to merge, and keep a deprecated _merge() alias