Add a broker

This is for @nchapman. This is the first Broker. See what you think!
It probably depends where all we need to answer this question. If it's only in this module, then this is probably fine, but it seems like we might need to answer the same question in different contexts.