Fix request offset resetting; refactor and clean up EtlRequest

This fixes the logic where an offset request is outside the bounds of
the available earliest and latest offsets for a partition. I had messed
it up in refactoring (though it was already suspect in it's behavior).
In the case where the offset is greater than the latest available, it
just sets it to the latest, which will probably mean that no data is
fetched. In the original code, it would set it to the *earliest*
available in that case, which is surely wrong. Maybe it's best to just
throw an exception.

Also made EtlREquest implement Comparable using topic and partition
number which will result in more consistent sorting (those are also the
fields used for equals() and hashcode()). Made the simple consumer use
the context to get configuration values for timeouts etc, rather than
hard coding them.

Also, when the getLatestOffset(long) is called directly (and it's
corollary for earliest), the cached value isn't changed directly, since
that should presumably be set by the no-arg method.
Fix hadoop dependencies by including only hadoop-client

This fixes the problems with conflicting Job classes on the classpath.
For details on the issue with cdh4, see
http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH-Version-and-Packaging-Information/cdhvd_topic_8_1.html
Write the requests to hdfs after the offset field has been set

This appears to fix the problem with jobs reprocessing data.
Fix left over experimental usage of nanoTime()

I had made some changes before using nanoTime and abandoned them, but
this was left in.
Set earliest offset to 0 if no offsets are found
Set leaderId too in copy constructor; update toString
Add toString() method to EtlSplit class
Refactor method that sets up input splits

Use guava's Longs for comparator and reorganize and clean up a few other
things.
Big refactoring commit, lots of changes including EtlMultiOutputFormat

This CL started as an exploration into EtlMultiOutputFormat to determine
why camus was exhibiting some inconsistent behavior with regard to
starting a new job based on the offsets of the last.

EtlMultiOutputFormat contains lots of changes. The count tracking it was
doing was totally broken ('[]', and empty json string was being written
in the hdfs records). I ripped most of it out and added something
simple count tracking.

I added a KafkaBrokerClient to encapsulate many of the operations done
with SimpleConsumers, which the broker client takes as a collaborator.
This allowed cleanup in KafkaReader and EtlInputFormat.

Other changes in KafkaReader.java
  - use guava's AbstractIterator to help simplify interface
  - removed context (was only used to create simple consumer)
  - cleaned up stuff about skipping messages
  - renamed variables to make more clear (initial/final instead of
    begin/end

I also removed the context from the EtlRequest class, which is really
just a model class. It shouldn't create consumers and network
connections internally. The methods to get offsets are now in the client
broker.

Removed some other now (and previously) unused classes.

Probably more cleanup...