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.