A few TODOs  resolved and some cleanup.

Removed the idempotent SQL generation.
Moved SQL Server specific SQL generation out of the base MigrationOperationSqlGenerator
Renamed ModelDiffer DiffSource and DiffTarget to CreateSchema and DropSchema
Added code to handle transitive renames in ModelDiffer
Updated and added tests.
Performed some cleanup (simplified expressions, , removed unnecessary NotNull annotations - as suggested by Resharper)
I thought about the same thing. This code is called from two execution paths, one when a table is created, the other when a primary key is added. In the first case we have a PrimaryKey object, in the second we have an AddPrimaryKeyOperation. Maybe I can create an AddPrimaryKeyOperation from the data in PrimaryKey so I can change the signature of this to take an operation.