EZP-23328: Implement DFS IO handler

> [EZP-23328](http://jira.ez.no/browse/EZP-23328)
> Split of #1002 with only DFS (see #1005 for the IO configuration part)

### 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

### 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
- [ ] DI Configuration tests
- [ ] DFS + handlers tests