Support property variance based on conformance
We had a primitive version of this before but I removed in a previous commit. This recreates the functionality in a
more refined form using features added after the initial implementation.
Also plugs a handful of feature gaps I noticed while implementing tests.