Client hooks

Something went wrong in the last conflict-fix in ultraform.js.
This has been fixed in this commit, resulting in a lot of changes that we have seen before.