Change Operation subclasses and Migration class to use Dataset

- Migration now uses reader/writer instead of source/target
- Migration#initialize sets up the Dataset
- renamed Operation#before_transform to Operation#setup, which gets
  called by Migration on add
- Migration operation methods now take field name instead of a field
  object
- removed AddField child operation from Cast and Update, since all
  fields are "added" now
- remove useless Copy operation
- Cast operation now uses Dataset#alter_field