extract workspace roots from model
Created by: sqs
This is a step toward breaking apart the monolithic data "Model" for extensions. A monolithic data model makes it hard to perform updates of state on the client side (each call site must know how to make a deeply nested update to the big object) and is not the ideal data model for performance (given that it will be tracking a lot of state and will require very frequent updates, such as for each keystroke).
After this PR, the only thing in the model is the viewComponents array. Subsequent PRs in this series move that into an even simpler editor service.
This is the 1st PR in the series #3312 #3313 #3314. Review from left to right.