Make propertyWhitelist more flexible
Make propertyWhitelist more flexible

The problem I encountered was that when you supply an array of
Property-ies for propertyWhitelist, you naturally have to specify a
specific axiom on a specific model. This runs into problems when the
same axiom is modified on a subclass of that model because
propertyWhitelist just uses the exact axiom it was given, which likely
wasn't the subclass.

To solve this problem, I wrote an adapt method for propertyWhitelist
that will take a map from axiom name to an object containing overrides,
then will look up the axiom on 'of', giving us the axiom for the class we
care about, and then will apply the overrides (if any) to that axiom.

Then I can do something like:

{
  name: 'propertyWhitelist',
  value: {
    foo: {
      label: 'Label Override',
      updateMode: 'RO'
    },
    bar: {} // Use an empty object to include in the whitelist but
            // without overrides.
  }
}

and it will be adapted behind the scenes to use the 'foo' and 'bar'
axioms defined on 'of', which is what we want.

Before, I'd have to do something like:

{
  name: 'propertyWhitelist',
  value: [
    foam.made.up.package.Baz.FOO.clone().copyFrom({
      label: 'Label Override',
      updateMode: 'RO'
    },
    foam.made.up.package.Baz.BAR
  ]
}

but if 'foo' or 'bar' were modified in subclasses of Baz, then those
overrides wouldn't be respected.

foam-framework/foam2,jacksonic/vjlofvhjfgm,jacksonic/vjlofvhjfgm,foam-framework/foam2,foam-framework/foam2,foam-framework/foam2,foam-framework/foam2,jacksonic/vjlofvhjfgm