fix for #396

Since it's allowed for different components to send the same command, a canonical sender is chosen for each command and properties are generated only once for the canonical senders, which are then used in to send the commands. This is not an issue for events, as those are sent directly through the app's bus.

Also uses the configured namespace names for contracts instead of hard-coding them.