Generates a homogeneous dict of the specified generators using kwargs.
    You can generate non-homogeneous dicts using `dict`.
    This is a class factory, it makes a class which is a closure around the
    specified keys and generators.

def dict_of(**kwargs):
    """
    Generates a homogeneous dict of the specified generators using kwargs.
    You can generate non-homogeneous dicts using `dict`.
    This is a class factory, it makes a class which is a closure around the
    specified keys and generators.
    """

    class DictOfKeyGenerators(ArbitraryInterface):
        """
        A closure class around the keys and generators specified above, which
        generates a dict of the keys and generators.
        """

        @classmethod
        def arbitrary(cls):
            """
            Generate a dict of the enclosed keys and generators.
            """
            return {
                key: arbitrary(generator)
                for key, generator in kwargs.iteritems()
            }

    DictOfKeyGenerators.__name__ = ''.join([
        'dict_of(', ', '.join([
            key + '=' + generator.__name__
            for key, generator in kwargs.iteritems()
        ]), ')'
    ])
    return DictOfKeyGenerators