API for project and workspace management.

From `ProjectController`, projects and workspaces can be managed. A project is a collection of workspaces, of which one and only one can be active at a time. By default, a new project has one workspace.

Only one project can be open at the time. The `ProjectController` can manage a list of projects but it's assumed that a project has an existing project file so that it can be opened.

Workspaces, where modules are interacting can be accessed from the current project and by listening through `WorkspaceListener`. Workspaces are suitable for hosting any type of data modules wants to.