Announcements

(User Story, To be Fixed , Priority: Critical, Test Status: No automated tests yet , Reported By Justin du Coeur, )
Summary: Implement a straightforward mechanism for "announcements".
The high concept here is that we need to be able to show a banner to all users, saying something system-wide. The x button on the banner should be recorded per-user, to say that they have seen this announcement, so that it won't be shown to this person again; we might also add a more-prominent "Dismiss" button that also does the same thing.
If possible, implement this in a way that makes it easy to show the same sort of banner on a per-Space basis, but the priority is a banner that shows to everyone. Note the implication that we might eventually want to show multiple banners, at least one system and one for the current Space.
The banner should be timestamped for when it was created. The dismiss should also be timestamped, to make it easy for the system to see whether the dismiss action happened after the current banner.
The Dismiss clearly belongs in the UserSession object, specifically in the UserState. (Be careful evolving this!)
It is less obvious where we should put the banner itself. This is going to need to be loaded frequently - how do we do this without too many cycles?
The announcement should almost certainly be an optional Text Property on Space - this is Querki, after all. So the question becomes, how do we add dynamic properties to SystemState, and propagate them around? This seems to imply a singleton Actor to maintain those properties. Maybe each Space checks in with that Actor every five minutes or so?