Proper support for removing and moving storages for specific backends

This adds the interfaces `IMovableStorage` and `IRemovableStorage` to denote storage backends which are able to rename or remove the mountpoint for the storage (currently only shared storage, external shared storage and archive storage can use the same interfaces)

This removes the dependency on a class defined by an app (`\OC\Files\Storage\Shared`) from the core filesystem logic and generalizes the special shared logic.

Also this patch fixes the behavior when deleting the "root" shared item where previously the source item was removed from the filecache for the original owner. With the new login the file or folder is just unshared and the source file stays intact.

cc @schiesbn @DeepDiver1975 @PVince81