Devoncarew fire git events

@gaurave @dinhviethoa @keertip 

This CL ties the git and the workspace a little closer together by adding some smarts to the SCM layer. The SCM layer now fires events on changes - such as branch changes - and the files view listens for those events. So, when you do a 'git checkout', the branch name on the file view updates automatically.

- the workspace is now in charge of managing the list of builders
- an ScmManager class has been introduced, to make it easier for scm providers to listen for workspace changes, and for interested parties to listen for SCM events on a per provider or per workspace basis
- the files view listens for scm events and updates labels appropriately. Some code that was in `file_item_sell.dart` has been moved to `files_controller.dart`