Allow the catalog to be generated on device properties as well

i always wondered why this (semi?) blocking stuff was in some of the components.  i assumed it was a workround for some kind of timing issue? Was wondering why something like this wasn't used somewhere in zenhub? instead.  im probably gilding lillies here.

def _compute(n):
    x = 2
    for _ in xrange(n):
        x *= x
        yield # Yields to the reactor :)
    send_somewhere(x)

coiterate(_compute(n))