1. Move code to it's own module.
2. Allow users to specify which fields to include in the sink (mostly useful for partitioned sinks)
3. Removed generated code.  Updated pom to generate it as part of the build.