Create abstract classes for database commands and upgrade commands to stay DRY.

Set expected database version to current database version, rather than allowing user input.
Inject run migrations command into run upgrade command to remain DRY.