creates a copy of the object without the
        cached results and with the given keyword
        arguments as properties.

def bind(self, **kwargs):
        '''
        creates a copy of the object without the
        cached results and with the given keyword
        arguments as properties.
        '''
        d = dict(self.__dict__)
        for k in d.keys():
            if k[0] == '_':
                del d[k]
            elif k.startswith('obj_'):
                d[k] = d[k].bind(**kwargs)
        d.update(kwargs)
        return self.__class__(**d)