Per topic partitioning bug fix and additional extension points

* Fixed bug in partitioners by topic
* Added pluggable offset writers - useful for writing plain text offsets
* Added record partition extension point - useful for updating hive metastore
* Update context when new mapper starts 
  - hadoop reuses committer and will call setupTask with new context when starting new mapper.  Verified context is being changed through the lifecycle of committer. 
  - addCounts uses this possibly old context.  Not certain the behavior is incorrect, but it could be since the output path changes when mapper changes. 
How does the workPath recorded inside partitioner be used later for hive registration?  Why this work (hive registration) needs to be done in the partitioner object (not in the committer)?