Change how DataSourceFormats are handled internally.

This and the addition of implicit UDT generation makes it easy to implement custom DataSourceFormats. I noticed the need for this from @rmetzger's avro input format.