In order to determine the data type of a property, we currently need to load the full content of the property. This is presently done not only for every property, but for every value of every property - this can get quite slow for pages that contain hundreds of statements.
It seems sensible to just cache the data types of all properties in memory, just like TermPropertyLabelResolved does this for the labels of properties. In order to do this, we need a way to quickly list all properties along with their type, so we can initialize/update the cache.
Implementing this is expected to provide a considerable performance boost especially for pages containing a lot of entities.