Fully perform each operation in sequence

- use intermediary Memory readers/writers for migrations involving more
  than one operation
- handle empty migrations (for simple conversions)
Raise exception in CSV reader/writer for invalid options