'Used in _lookup and __init__ to interpret *a as being a list
of args to match columns in the same order as __table__.c
For example, if a class Foo has fields a and b, this function
allows the two to work identically:
>>> foo = Foo(a = \'arg1\', b = \'arg2\')
>>> foo = Foo(\'arg1\', \'arg2\')
Additionally, this function invokes _make_storable on each of
the values in the arg list (including *a as well as
kw.values())'

@classmethod
def _disambiguate_args(cls, filter_fn, *a, **kw):

    args = []
    if (filter_fn is None):
        cols = cls.__table__.c
    else:
        cols = filter(filter_fn, cls.__table__.c)
    for (k, v) in zip(cols, a):
        if (not kw.has_key(k.name)):
            args.append((k, cls._make_storable(v)))
        else:
            raise TypeError, ("got    multiple    arguments    for    '%s'" % k.name)
    cols = dict(((x.name, x) for x in cls.__table__.c))
    for (k, v) in kw.iteritems():
        if cols.has_key(k):
            args.append((cols[k], cls._make_storable(v)))
    return args
