use a partitioner for the producer

backward compatible

provided partitioner strategies:
- fixed partition (default partition 0)
- random distribution over multiple partitions (using Math.random)
- consistent hashing (configure algorithm and what part of the message should be hashed)

NB: version not yet bumped