Add simple promotion rules to datashape

My assumption was that they are coming ultimately from a call to to_numpy_dtype which will throw if anything is an option type. I don't enforce this though so I'll add some code to return if it's already an option type.