Create a Command from a given function, for use with ViewModels.
A Command is a function with an extra
canExecute
observable property to determine
whether the command can be executed. When executed, a Command function will check the
value of canExecute
and throw if false. It also provides events for when
a command has been or is about to be executed.