Support optional geometry columns

I dropped the type restriction on `Geometry` and changed stuff to rely only on the implicitly available `GeoType`s. Simple `GeoType`s are implicitly casted to `Option`ed `GeoType`s.

Besides that, I changed some base classes to avoid case class inheritance.