Added a visitor (DatabaseModelModifier) that will be used to keep the da...

...tabase model up to date while the migration operations are handled.

Updated code in migrator to be able to determine the source model for a migration, which is the target model of the previous migration, or empty model if first.
Updated code to pass the source database model to the migration operation SQL generators instead of target model. The database model is cloned and updated as the operations are handled.
Updated code to use the migration operation sql generator factories where needed (was TODO).
There are two directions we can go about this:
1. We can be strict and throw exceptions with explanatory messages every time we detect an inconsistency. The downside is that that does not allow for scenario where, lets say, a table is created using a SqlOperation, then a column is added using MigrationBuilder.AddColumn, since the table will not be present in the database model.
2. We can ignore inconsistencies (or produce warnings). The downside is that early detection of potential errors will not be available, they will likely show up when the SQL script is run.