consumer: silently skip messages already consumed

It seems that sometimes the broker can return us messages we've already seen,
and that this is legitimate, so we shouldn't produce errors, just quietly ignore
them.

Possibly fixes #166 pending confirmation from upstream
(https://issues.apache.org/jira/browse/KAFKA-1744).
consumer: more robust handling of message offsets

- Only skip messages before the requested offset at the beginning of a set
- Error if we don't receive any legitimate messages in the set.
consumer: add unit test

also fix a bunch of other bugs found by the test
Merge pull request #168 from Shopify/consumer-skip-consumed-messages

consumer: silently skip messages already consumed
Check some errors

Discovered by https://github.com/kisielk/errcheck
Merge pull request #173 from Shopify/errcheck-1

Check some errors
Rename extraBroker to seedBroker.
Merge pull request #174 from Shopify/seed_broker

Rename extraBroker to seedBroker
New Producer design
Workaround https://issues.apache.org/jira/browse/KAFKA-1718
Add some logging to the new producer
Add some tests

Also fix one bug found by the tests
Remove an unused struct element

Also simplify an if/else into just an if as suggested by golint.
Take PartitionerConstructors in the producer

and generate a new partitioner for each topic
Get rid of partitioner locks

they are no longer necessary
Default to hash partitioner

This is what the scala client defaults to
Move PartitionerConstructor definition into partitioner.go
Fix shutdown even harder

Worked through the happens-before graph a little more formally and found some
(admittedly unlikely) cases where shutdown would fail/panic/hang/whatever. This
version *should* be correct.
Fix Close() to return nil in case of no errors

A typed nil still compares non-nil when stuffed into an interface. Thanks to Tom
(ORBAT) for pointing this out.
Actually check the return from Close in our tests