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.