Hopefully final touches and cleanup of the primitive types

* Add good docstring to BasePrimitiveType to explain the flexible to_primitive conversion
* Add default message for type validation
* In BasePrimitiveType.to_primitive, only return outright for *simple* primitive values
* Provide list and dict conversion functions that descend into elements and values (respectively) to further apply conversion
* Provide validators for list and dict values that descend into elements and values (respectively) to further apply validation
* Rename AnyPrimitiveType -> PrimitiveType, provide class docstring
* Provide class docstring for SimplePrimitiveType