Provider specific migrations:

Part 1 (first commit)
-------------------------
1. Updated migration operations pre processors to be able to run at the very end of Diff instead of the begining of SQL generation. This will result in full sequences of migration operations specific to the provider.
2. Removed DatabaseModelModifier from production code.
3. Updated the MigrationOperationSqlGenerator to use the target DatabaseModel instead of a clone of the source DatabaseModel that is updated as the operations are processed.
4. Updated tests. Removed some scenarios that were possible before because the migration operations could be altered  by the user before being passed to pre-processor, but are not possible anymore.

NOTE: The name PreProcessor should probably change. Because the input into the PreProcessor comes from the differ without being altered by the user, they can be simplified and even integrated into the provider specific diff logic, but I would prefer to do that a bit later, in order to avoid larger changesets which are difficult to review.

Part 2 (second commit)
------------------------------
1. Modified CreateSequenceMigration and CreateTableMigration to contain fields similar to Sequence and Table instead of referencing instances of those classes. This enables the removes of the relational model.
2. Updated related code and unit tests.

Part 3 (tbd)
------------------------------
Injecting extensions into base ModelDiffer and MigrationOperationSqlGenerator, replacing DatabaseModel references with IModel references and removal of relational model.
If I create a class derived from AddColumnOperation--say, MyAddColumnOperation--and add an instance of this with Add it will add it to the operations list  for MyAddColumnOperation, but if I add it with AddRange<IEnumerable<AddColumnOperaton>> it will add to the operations list for AddColumnOperation. And there is no way using the Add method that I could get my operation into the list for AddColumnOperation.