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 
The error is:
```
{"reqId":"b0e020fbf3203424c5c57aa9ba22ba3b","remoteAddr":"192.168.1.34","app":"PHP","message":"Undefined offset: 0 at \/var\/www\/owncloud\/apps\/files_sharing\/lib\/mountmanager.php#55","level":0,"time":"2014-11-26T23:54:25+00:00","method":"GET","url":"\/owncloud\/"}
{"reqId":"b0e020fbf3203424c5c57aa9ba22ba3b","remoteAddr":"192.168.1.34","app":"PHP","message":"Call to a member function getStorage() on a non-object at \/var\/www\/owncloud\/apps\/files_sharing\/lib\/mountmanager.php#64","level":3,"time":"2014-11-26T23:54:25+00:00","method":"GET","url":"\/owncloud\/"}

```

Note: before switching to this branch it worked fine. Now because of this error the user cannot do anything, so failing gracefully is the way to go in case the env has broken shares.