factor subcommands into separate modules, have submodule be first arg