Adds support for updates in subsequent runs of the migration.
Moves updates closer together.

Updates can happen really late, and can be wrapped into one call to
execute. This saves about ~25% of execution time on subsequent migration
runs.