MBS-5863: Add work attribute support to Edit::Work::Edit

Edit::Work::Edit now does the 'ValueSet' role for the 'attributes'
property, which allows it to have a list of attribute definitions.
When an edit is accepted, these attributes will be merged as a set,
much like IPI editing.

The Edit::Role::ValueSet class has been extended to take a higher
order function that is used to determine equality over properties
being merged. This wasn't necessary for IPIs as they are strings,
but attributes are richer structures. The hash function for attributes
is their canonical serialization to JSON.
Merge branch 'mbs-5863-edits' into beta