Add IOPlugin

I would prefer to have this settled soon (not necessarily now), because otherwise we'll need to break the API again. My reason against is that nothing else in the implementation points to an IO usage, except for this one parameter and enum, which is fishy.