Split getting a property's datatype into its own request so it can be cached.
Since a property's datatype will never change, we can safely cache it "forever".
I also fixed it so that we don't guess the datatype based on what was returned in
a "datavalue" object, since that is unreliable.