[Refactor] Encapsulate Web IDE extension state management

Description

Currently the Web IDE extension doesn't have it's state management encapsulated. As a result:

  • We aren't able to easily share state across the other extensions (i.e. the ai-code-assistance extension has to re-fetch the project).
  • Every component (i.e. source control) currently assumes the state doesn't change so it has to be disposed and reinitialized when the state changes.
  • Adding new state is a pain because it has to be explicitly passed along everywhere.
  • Certain changes are more difficult than necessary (&10559).

Proposal

Look at the ps-rx-experiment branch. Let's introduce a type-safe package which will house the extension's current state and handle subscribing to state updates from different components.