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.
Leaving it as Serializable as we discussed. Someone can easily override ExecuteStatementsWithinTransaction and use a different IsolationLevel if needed.