Make the DFS backend configurable

> Implements [EZP-22960](https://jira.ez.no/browse/EZP-22960)
> *Status*: ready for review

So far, the DFS FS backend, `eZDFSFileHandlerDFSBackend` class, in charge of reading/writing binary files to NFS, was hardcoded and directly instantiated by the MySQLi DFS handler.

This PR makes this handler swappable by any other class, so that more advanced handlers can be used.

One use-case is illustrated by http://github.com/bdunogier/ezdispatchabledfs, that replaces the handler with a dispatcher, and sends the calls to the appropriate one depending on what each of them supports. With this dispatcher, files can be stored anywhere, for instance to S3.

### Implementation
- *new interface*, `eZDFSFileHandlerDFSBackendInterface`. It is extracted from `eZDFSFileHandlerBackend`, and must be implemented
- *new *interface*, `eZDFSFileHandlerFactoryDFSBackendInterface`. If implemented by the backend, it will be instantiated using the `factory()` static method, that may use INI settings. If not, the handler (like the original one) is constructed via `new`.
- `dfscleanup.php` had to be refactored a bit, since it directly iterated over the NFS mount point. This is now taken care of by a `getFilesList()` method in the DFSBackend, that was also added to the interface.
- eZDFSFileHandlerDFSBackend` now checks, after a negative exists, that the NFS mount exists. If it doesn't, an exception is thrown. This is taken into account in `dfscleanup.php`, so that the operation is aborted if NFS dies

### Todo
- [x] Rebase
- [x] Fix `dfscleanup.php`/ Implement `DFSBackend::getFilesList()`.
- [x] Fix the `instanceof` usage on a string (will always return false)
- [x] Move the `supports()` method to the dispatcher extension, in its own interface.
- [x] Check that configured backends implement `eZDFSFileHandlerDFSBackendInterface`
- [x] Handle the use-case where a dead NFS/DB would delete valid data (use exceptions within DFS backends, like it is done within DB backends)
- [ ] Consider splitting the DFS Backend interface addition to another PR...
- [ ] Add feature doc ?