Add Isolatable<T> interface The idea behind this code was to attempt to endown the `ValueSnapshot` hierarchy with the ability to "isolate" the objects they are snapshotting.
This commit cannot be merged as-is because it breaks several important integration tests. The crux of the issue is that `SerializedValueSnapshot` instances do not contain enough information to recreate the orginal objects. What's more, I'm not sure they can be enhanced to capture enough information.
Added some constraints on the 'from' and 'to' attributes for a consumer provided variant, to help the user avoid attempting various cases that are not yet really supported. - The 'to' and 'from' attributes must be not empty. Empty 'from' basically means "I can transform _any_ input" and an empty 'to' basically means "I can produce _any_ output (without knowing what it is)", neither of which make much sense. - The 'to' attributes must be a subset of the 'from' attributes. Adding attributes to make a more specific variant is not required yet, and will break when switching 'compatible when missing' to default to true. For now, disable this case.