[WIP] 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

cc @PVince81 @schiesbn @DeepDiver1975