Incorporate the name given to record writer into the record writer

Currently, it is not possible to do things like have partitioned output directories because the name given to the record reader is never used. This creates a hook for doing this.

The purpose of the interface approach is since FileOutputFormat is a concrete class, I want to allow people to be able to use this feature without having to extend one of our abstract classes. This is also why I use the static method approach -- this gives people a clear template that they can copy and paste.