Refactored avro serialization to use AvroMode.

AvroMode is an enum that is used to construct DatumReaders and
DatumWrtiers. The default generic, specific, and reflect implementations
returned can be overridden cleanly.

This still needs to be cleaned up. IntelliJ likes to "optimize" import
statements.