Shard broadcast & ShardRequestKeyOverride

Originally I wanted to have,

`ShardRequest(shardKey: ByteString, command: ByteString, params: ByteString*)`

where in the `ShardManager` the `shardKey` would not be used as part of the command.

`client forward Request(request.command, request.params: _*)`

However this is not backwards compatible and would allow consumers to easily/mistakenly break the sharding model. Having a new case class `ShardRequestKeyOverride` with the helper function `withKeyOverride` makes the intent clear.