EZP-23328: Implement DFS IO handler

> [EZP-23328](https://jira.ez.no/browse/EZP-23328)
> Status: works, but with many todo

This (big, sorry) PR adds a DFS IO handler.

### Features
- Separates BinaryData and Metadata handlers
- Comes with a Flysystem binarydata handler that handles many storage backends (local, s3, dropbox...)
- Has a front-controller that serves local files like the old index_cluster.php
- URL decorators: can modify an URL to a binary file, for instance to serve static assets using another server, or to serve files from aws-s3 directly
- Semantic config, where different io handlers can be assigned to different scopes

### Configuration example
This uses the legacy dfs databas + local filesystem (DFS like).

```yaml
# set the default IO handler to legacy_dfs, defined below
ez_io:
    system:
        default:
            handler: legacy_dfs

ez_dfs:
    # defines a dfs handler named legacy_dfs
    legacy_dfs:
        metadata:
            legacy_dfs_cluster:
                connection: doctrine.dbal.default_connection
        binarydata:
            flysystem:
                adapter: nfs
                # prefix all uris with http://static.site.com/
                url_prefix: http://static.site.com/

# flysystem adapter configuration
oneup_flysystem:
    adapters:
        # local adapter named 'nfs' that operates on /home/bertrand/nfs
        nfs:
            local:
                directory: /home/bertrand/nfs
```
### TODO
- [x] Cleanup unfinished features (keep `Metadata/LegacyDFSCluster`, `BinaryData/FlySystem`)
- [x] Merge UrlDecorator
- [ ] Tests...
- [x] `getMetaData` in `FlySystem` BinaryData handler (quite crude, but would require that the metadata handler is different for different flysystem adapters).
we need to defined a bit more what should be available here, should also cleanup naming (datatype -> mimeType)