Support for (re)moving mountpoints

Second take of #8430 

Adds support for removing and removing mounted storages if supported by the app mounting the storage.
This is implemented in the `Mount` class which keeps the mount moving logic separate from the storage implementations and allows apps to implement mountpoints moving for core and/or 3rdparty storage backends.

To make a mount point (re)movable an app must create a subclass of `\OC\Files\Mount\Mount` implementing `OC\Files\Mount\MoveableMount` and implement the two methods with the needed logic, then mount the desired (re)movable storages using the custom mount class.

Currently 2 apps implement the interface:
- files_sharing where it replaces the old sharing-specific logic for moving mounts (@schiesbn can you help me with this one)
- files_external where it makes Personal (added/managed by the users themselves) external storage (re)movable

To test:
- Shared
 - Share a file from user1 to user2
 - As user2 rename the share and check if it's accessible
 - As user2, move the share to a different folder and check if it still works
 - As user2, remove the share and check if it's removed
 - As user1, check if the shared file still exist
- External
 - Mount an external storage from the Personal settings
 - Rename the mounted storage in the files app, verify that the storage still works and the mountpoint is updated in Personal settings
 - Remove the mounted storage in the files app and check if the configured storage is removed from Personal settings

cc @PVince81 @schiesbn @DeepDiver1975