refactored code out of `commands` and into Config::list_commands

this makes it easier for other commands to reuse that logic
this forced a lot of refactoring:
-	"structural" commands now have to override a structural() method to declare their structural-ness
-	`help` and `version` are currently exceptions, since we're using the base (App::Cmd::Command) versions of those
-	list_commands() now understand how to return structural internal commands (or not)
-	list_commands() can now be called in a scalar context to return a command name => description hashref
--		(list context still returns just the names)
this also fixed a couple of mis-features:
-	internal commands which don't have any actual implementation in the current VC are no longer listed
--		(which makes sense, since you can't run them anyway)
-	`self-upgrade` is now listed as a structural command even under --policy
--		(before I was specifically excluding it, which was probably stupid)
also forced me to extend some of my testing infrastructure:
-	exposed fake_app()
-	fake_app()'s `is_custom` param is now a named param
-	can now call fake_config() with a `no-policy` param to stop test command from being given a ProjectPolicy
-	fake_confstring(undef) will now work as you'd expect
cache the VCtools directory for possible later use

this will make it easier to find things in share/
a new method to fill in templates with %info methods

includes a rudimentary looping ability
ideally, I should probably replace this with TT or somesuch at some point
but right now I'm a bit leery of adding more prereqs
add %me as an %info method which passes through to our command (like %project)
first cut at new command: `vc shell-complete`

gives shell-specific tab completion output for your particular shell
initial templates: bash and tcsh
does completion for all vc commands, for `vc help`, and for any custom command which has a list-validation first arg