ShardRequestKeyOverride and ShardBroadcast

There are two significant changes in this PR,

### ShardRequestKeyOverride

The `ShardRequestKeyOverride` provides a mechanism for specifying a shard key as opposed to the `ShardRequest` where the key is used for both the shard-key and the command-key.

### `ShardBroadcast`

The `ShardBroadcast` allows one to send a message to all shards. It traverses the map of shards sending the message to each.

It was paramount to maintain backwards compatibility.