flatten nested dictionaries to update pathwise

        >>> Config({'foo': {'bar': 'glork'}}).update({'foo': {'blub': 'bla'}})
        {'foo': {'bar': 'glork', 'blub': 'bla'}

        In contrast to:

        >>> {'foo': {'bar': 'glork'}}.update({'foo': {'blub': 'bla'}})
        {'foo: {'blub': 'bla'}'}

def update(self, E=None, **F):
        '''flatten nested dictionaries to update pathwise

        >>> Config({'foo': {'bar': 'glork'}}).update({'foo': {'blub': 'bla'}})
        {'foo': {'bar': 'glork', 'blub': 'bla'}

        In contrast to:

        >>> {'foo': {'bar': 'glork'}}.update({'foo': {'blub': 'bla'}})
        {'foo: {'blub': 'bla'}'}

        '''
        def _update(D):
            for k,v in D.items():
                if super(ConfigDict, self).__contains__(k):
                    if isinstance(self[k], ConfigDict):
                        self[k].update(v)
                    else:
                        self[k] = self.assimilate(v)
                else:
                    self[k] = self.assimilate(v)

        if E is not None:
            if not hasattr(E, 'keys'):
                E = self.assimilate(dict(E))
            _update(E)

        _update(F)

        return self