Implements subcommands enumeration

Invoking cargo with new "--list" option now shows list of installed subcommands. (see #270)

p.s.
The code is less functional-style than I'd like it to be. Please let me know if there are smarter ways to write them.
Yes, windows uses `PATH` as `LD_LIBRARY_PATH` basically (on linux). I believe you can just assume `PATH` is present (unwrap getenv) and you can also delete the TODO/cfg(windows)