DRY and add support for async error handling.
Don't need the belt *and* the suspenders.
Incomplete asynchronous dependency resolution.

No rollback, validates as it goes rather than before the migration run.