Minor improvements to DFS classes

> Status: for discussion

Makes the API more extensible, and more open to new stack bundles. Usage of those changes is illustrated in https://github.com/bdunogier/io-legacy-dispatcher-bundle/pull/1:

- the singleton added a requirement for an extra reset;
- `resetDBBackend()` is used to reset the backends once the kernel is built;
- A service, declared in the extension, is injected to the INI settings pre kernel build
With the singleton, we had to reset the instance in an event. Since the DBHandler handles its own singleton, it was a duplicate.

If we want the singleton, I'd rather move to a specific interface, where the singleton is explicitly visible (buildSingle or something), and where the reset method is part of the interface.