Refactor `migrate.py` to use a monkey-patching strategy

* Previously, rewrites of several `alembic.command` functions were
  needed; now, all default alembic commands should function correctly
  by monkey patching two core functions and extending the argument
  parser:
  - `EnvironmentContext.__init__` is patched to override `version_table`
      argument;
  - `ScriptDirectory.from_config` is patched to override the `versions`
      directory location to be independent of the location of `env.py`
  - `upgradeall` and `downgradeall` are now proper command-line
      arguments, and use internal `upgrade` and `downgrade`
      implementations