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
will do