FORGE-2055 Create a cache for UICommands

A cache for UICommands is introduced for any operation that
does not mutate the state of the UICommand, for instance,
displaying the command names as list, in the Shell or in an IDE.

This commit also introduces a new API to ensure that new UICommand
instances are created when commands are executed. Cached UICommands
are not used at this point to ensure that cached UIInput values are
not used.