add a dependecy library; add general decorator support

- add a simple dependency manager. This lets us populate a single dependency manager instance, instead of passing numerous singletons around.
- add a decorator framework. It lets decorators add text decorations to objects without knowing where in the UI those decorations will be used. Similarly, UIs can add decorations without any knowledge of the specific decorations (scm, pub, ...).
- re-write the scm decorations (the branch label) to use the decorations framework
- write a pubspec.yaml decorator, to display the library name

@umop, @dinhviethoa
This gives us the flexibility to have multiple simultaneous, unrelated configurations. Or the ability to create canned configurations, like for testing. It's slightly more flexible.

Long-term I think we'll want a more modular architecture, where components can be dropped into an app framework, and discover their dependencies, rather then having to be explicitly wired up by a parent.