accept command name in decorator
also mark cached in prepare
pass command_name to the command function itself
Merge branch 'fix-command-binding' into use-caching
add tests