I'm not seeing where changing the I/O system will do any of that. Currently nearly all export options are handled using extension parameters, whereas most of them can be handled in a generic way by modifying the SVG that is passed to the extension before saving. The second item of that could be made orders of magnitude easier with some changes to the IO extension system.
Currently the Export dialog can export anything. It does not need a new I/O system to do that.
The Export dialog can only save PNGs, unless something has dramatically changed since I last looked at it. The Save dialog can save anything, but it doesn't have the options present in the Export dialog, like limiting the exported area.
Oh, and clipboard and drag-n-drop already use the extension mechanism.
The clipboard does, but it's fragile, and it requires saving to temporary files which is clearly suboptimal. That's because the extensions receive filenames instead of streams to save to or read from. Drag and drop uses an entirely different code path in interface.cpp.
By the way, I was just asking which idea would be the best, rather than which would be the worst :)
Regards, Krzysztof Kosiński