imm_dict(imm) yields a persistent dictionary of the params and values of the immutable
    object im. Note that this forces all of the values to be reified, so only use it if you want to
    force execution of all lazy values.

def imm_dict(imm):
    '''
    imm_dict(imm) yields a persistent dictionary of the params and values of the immutable
    object im. Note that this forces all of the values to be reified, so only use it if you want to
    force execution of all lazy values.
    '''
    immd = dict(**imm_params(imm))
    for (k,v) in six.iteritems(imm_values(imm)):
        immd[k] = v
    return immd