changed migration process to use abstracted MigrationStorageController which can be overwritten by the end user to provide a custom implementation of migration metadata storage