Cache commands in complete_commands

Iterating through all directories in path to find commands
can end up quite slow, so cache the result per directory and
update it only if the directory modification time changed.
Update design.asciidoc

Add self documenting as a goal, and precisions relative to pragmatism
and orthogonality.