major new features aka what has science done

- plugin type/ alias mappings can now have either a string or a
map value. Strings are expanded to the map {_class: string}
- _class values for aliases can refer to other aliases (assuming
they eventually resolve to a real class name)
- this means that mutliple aliases can refer to the same class
if desired (eg. to support legacy syntax + new labels); only one is
allowed to refer directly to the class though and it is the name
given in reverse look-ups
- these config spaces can contain per-alias default field values;
they inherit recursively through their _class pointers; they are
considered user-space so all 'inheritance' is done with full merges
- alias configs support the special _primary key that designates
a field whose setting is integral to the alias's config - this lets
the config take the form of {key: non-map} where the key is the
type as per the single key as type sugar, and the 'non-map' is the
value that will be put into the _primary field (other fields will
use their defaults). ie {key: non-map} becomes {type: key,
_primary: non-map}
- alias configs support the special _inline boolean property. This
allows individual aliases to opt-in to heuristics that operate on
cases that look like {key: non-map, other-field:other-value}. It
uses _primary to remap this to {type: key, _primary:non-map,
other-field:other-value}. Essentially, it is the normal _primary
sugar, but allows for multiple keys in one object. It is intended
for only very unusual edge cases and tinkering