Refactor shared storage

Since the removal of the Shared folder in oc7 the logic of the shared storage and cache can be greatly simplified.

This replaces the shared storage with a combination of 2 generic storage and cache wrappers
- `\OC\Files\Storage\Wrapper\Jail`: limits all access of the storage to a specific folder
- `\OC\Files\Storage\Wrapper\PermissionsMask`: applies a permissions mask on top of a storage

Together they form 99% of the logic behind a share (a sub directory of storage with limited permissions) and also allow dropping the `ReadOnlyWrapper` previously in place.

Overall this drastically reduces the amount of logic for shared storages which results in a nice performance increase.
On my local test instance this reduces the time needed for a WebDAV upload to a shared folder with ~120ms and drops the number of database queries by 103

TODO:
- [x] Adjust unit tests
- [x] Mount any storage inside a shared folder for the share recipient

cc @DeepDiver1975 @PVince81 @schiesbn 
Added a check