User defined datatypes

Dummy PR so I can comment on this branch.
It is a little odd to have a case class that takes no arguments.  Instead I'd propose we make the convention to case objects.  I'd also consider making the the `dataType` an abstract member so you can avoid the overhead of either duplicating the schema or having a separate container object as you do here.

I'm also not sure `dataType` is the best term here, but I'm not sure what is.  `sqlType`?  `convertedType`? something else?

I do like the use of inheritance though :)  That's not what I was envisioning from our discussion for some reason, but seems to work out pretty cleanly.