Add a broker

This if for @nchapman. This contains #1606 so contains both the first Relier and the first Broker. See what you think!
So, the idea is that the broker knows that it is in the desktop context and everything else has no need to know, and `isDesktopContext` can be ripped out of Session. I'll update to use the named string from Constants.