This addresses GitHub issues 824, 847, and includes additional cleanup.

The base Migration class does not implement IMigrationMetadata anymore.
Added MigrationExtensions helper class to avoid casting everytime metadata information is needed from a migration.
Removed UpgradeOperations and DowngradeOperations properties from IMigrationMetadata.
Renamed MigrationMetadata to MigrationInfo and added constructor to create an instance from a Migration instance.
Updated MigrationAssembly to return Migration objects instead of IMigrationMetadata
Upated HistoryRepository to return HistoryRow objects instead of IMigrationMetadata.
Updated Migrator.GetDatabaseMigrations to return Migration objects.
Updated code and unit tests as necessary.    
No, it practically specifies a migration, so we don't have to pass all the fields as separate parameters.