Rewrite consumer to support multiple partitions

- `Consumer` is now a much lighter "manager" that spawns `PartitionConsumer`s
  instead. `PartitionConsumer`s behave and have an API almost exactly like the
  old `Consumer`.
- Automatically groups and redispatches PartitionConsumers when leadership moves
  in the cluster.

As with the producer-ng, this is effectively a rewrite and (with the exception of the changes to functional_test.go) should be reviewed wholesale rather than by diff.

Not pinging anyone for review yet, there are still other priorities, but I wanted to get this into a PR before I forgot about it.