Added a SqlServerMigrationOperationPreProcessor class ...

...that is used to pre-process the migration operations (alter column and drop column) before generating SQL. A drop column is pre-processed into a DropDefaultConstraintOperation if a default exists followed by the DropColumnOperation. Alter columns are preceded/succeeded by corresponding Drop/Add default constraint, primary key, foreign key, index. The preceding/succeeding operations are inserted before/after groups of alter column operations. Alter timestamp column is pre-processed into drop/add column.          

Changed IMigrationOperationVisitor from interface to abstract class to be able to provide a default implementation.

Yes, unless there is some specific reason for it to be internal. Typically the only reason we have internal surface in EF7 is when it impacts the usability of the public surface. Occasionally surface may be internal because it really is implementation detail that would never be accessed/replaced at the given level. It does not seem like either of these things are true here.