Project API/SPI for project and workspaces manipulation.

The API defines Project and Workspace interface. Most of modules will use these interfaces to watch the application lifecycle. The ProjectController service manage the system. A ProjectListener interface can be used to track project events.

The SPI notably defines how modules can interact with the workspace lifecycle. The most common need is for a module to attach a unique model to each workspace. The best way to do that is to implement a Controller service. This controller will be called when a new workspace is created. The alternative way is to implement a WorkspaceListener service to listen to the project lifecycle.

See WorkspacePersistenceProvider for project saving/loading.