Execute commands hierarchically in a commit

This introduces a means to execute commands after commands on which they depend
have already been executed.  There will be two follow-up branches:

* Wait until each level of the hierarchy has fully executed (i.e.: RPC
  callbacks received) executed before moving on to the next
* Remove commands from the changeset after they have executed.

Fixed test that was doing a deep-equal on an object that had changed.