What are the semantics of `PrimitiveType`? Specifically, I'm surprised that `StringType` and `DecimalType` are considered `PrimitiveTypes`.  Also I wonder if we can unify this with `NativeType` somehow.  I'm not really sure, but I'd like to avoid too much explosion here.