Create a new Ent representing the differences in two or more
        existing Ents.  Keys in the later Ents with values that differ
        from the earlier Ents will be present in the final Ent with the
        latest value seen for that key.  Later keys of different type than in
        earlier Ents will be bravely ignored.

        The following keywoard arguments are recognized:

        newkeys: boolean value to determine whether keys from later Ents
        should be included if they do not exist in earlier Ents.

        ignore: list of strings of key names that will not be included.

def diff(cls, *args, **kwargs):
        """Create a new Ent representing the differences in two or more
        existing Ents.  Keys in the later Ents with values that differ
        from the earlier Ents will be present in the final Ent with the
        latest value seen for that key.  Later keys of different type than in
        earlier Ents will be bravely ignored.

        The following keywoard arguments are recognized:

        newkeys: boolean value to determine whether keys from later Ents
        should be included if they do not exist in earlier Ents.

        ignore: list of strings of key names that will not be included.

        """
        newkeys = bool(kwargs.get('newkeys', False))
        ignore = kwargs.get('ignore', list())

        if len(args) < 2:
            raise ValueError('less than two ents given to Ent.diff()')
        elif not all(isinstance(s, Ent) for s in args):
            raise ValueError('all positional arguments to Ent.diff() must '
                             'be instances of Ent')

        s1 = args[0]
        differences = Ent()

        for s2 in args[1:]:
            for key, value in s2.__dict__.items():
                if key in ignore:
                    continue

                if key in s1.__dict__:
                    v1 = s1.__dict__[key]
                    if type(value) == type(v1):
                        if isinstance(v1, Ent):
                            delta = cls.diff(v1, value, **kwargs)
                            if len(delta.__dict__):
                                differences.__dict__[key] = delta
                        elif v1 != value:
                            differences.__dict__[key] = cls.load(value)

                elif newkeys:
                    differences.__dict__[key] = cls.load(value)

            s1 = s2

        return differences