source.py: Split up staging functions into separate codepaths.

Currently we pass a file path string or Directory object to these methods
depending on whether BST_STAGE_VIRTUAL_DIRECTORY is set, which is not very
pretty for plugin developers especially if they are using type annotations
and need to handle `Union[str, Directory]` in these methods.

Instead, created Source.stage_directory() and Source.init_workspace_directory()
to handle the Directory variants of these methods separately.

Also updated `local` and `workspace` plugins to use the new methods.
3 files changed