Prototype change sets

Completely rework how to handle config changes.  Rather
than allowing objects to be directly edited.  A change
set contains a number of configuration changes to make
which can then be applied transactionally.  This should
then also work nicely with the CLI.