Refactor out validation from MigrationRunner

Create a new class called MigrationValidator that removes the internal
validation logic from the MigrationRunner.
Refactor timing logic out from MigrationRunner

Move the time action method into the StopWatch class. This affected a
test that had to be done slightly differently.
Refactor out MigrationScope from MigrationRunner

Create new MigrationScopeHandler class which handles the transaction
logic.