Some reorganization.

Mostly name changing and some small moves.
Make it so sub-commands explicitly accept an argv.

Hopefully this will make them testable.
s/main/run because the signature doesn't match Rust's special main any more.