Allow certain operations to work without loading a project

This patch removes the requirement to load a project.conf at startup time,
accomodating certain operations which do not need to observe workspace
state or load elements.

Summary of changes:

  * _frontend/app.py: Don't error out if a project cannot be loaded.

    The project is optional, and Stream() will raise an error if a project
    is required for the operation it is asked to perform.

  * _frontend/widget.py: Support printing the heading without a toplevel
    project.

  * _stream.py: Handle cases where the main project is None, and
    raise an error in cases where a project is required.

  * _workspaces.py: Handle cases where the project directory is None,
    in case we are looking at an ArtifactProject which has no directory.

  * tests/format/project.py: Update the missing project test to expect
    a different error, and observe multiple cases where a project might
    be required.

    We still have an error for missing projects, but it is only issued
    for cases where a project is expected, we need to continue testing this.
5 files changed