Restructured updates

Major changes include:
- Properties of cues are now stored in a dictionary and referenced with keys
- Cues are now more (but not totally) self-sufficient; that is, they have a weak pointer to their owning workspaces, and they can use it to do things like start and stop themselves.
- Cues now implement the up/down push/pull model so that the flow of property data can be controlled more precisely
- Workspaces no longer fetch main properties on every update notification
don't be so nice about failed propertyKey (nil)