allow user to pass in opts

*Example Hash*
```ruby
opts = {
  'serializer.class'      => 'kafka.serializer.StringEncoder',
  'partitioner.class'     => 'kafka.producer.DefaultPartitioner',
  'request.required.acks' => '1'
}

Hermann::Provider::JavaProducer.new(broker_ids, opts)
```

This should be defined as a `ConfigurationError` instead in `errors.rb`. Raising a string is no bueno, we need typed exceptions