[git] Replace ci and cm aliases with a dwim version of ci

When given an argument ci will now act like cm (i.e. set commit
message).  Otherwise it will just commit.
[git] Do not require pressing Return in “git add -i”
[shell] Rewrite cd, drop some features, add some others

I ended up never using “...” or substitution features from the cd
function.  Replace them with cd that accepts a command to be
executed in pointed directory.  For example “cd ~ ls" will run
ls in home directory.