Added basic logging to migrations.

Also re-factored the code in Migrator to match the behavior from EF6 by running each migration in a separate transaction, instead of running all in one transaction. The UpdateDatabase code path is also used to generate SQL, with a "simulate" flag set to true, in which case the sql statements are collected but not executed.
Updated a bunch of tests and added more Migrator tests.
The changes in this file are not as scary as the diff. The migrator is conceptually the same for the most part. Mainly I moved code around and split a couple of methods but the diff is not smart enough to figure that out. It may be easier to follow by looking at the full file than looking at the diff.