Strategy for changing the permissions of objects in the database
as well as verifying that the permissions for the modified objects
are sensible after the change.
This interface is designed to be used in an asynchronous situation
where as many individual steps as possible are performed rather
than performing everything in one go.
Return all the checks necessary to validate the
given object if it were to have its permissions.
The Object return value should be assumed opaque,
and is primarily intended for passing it back to
Change the permissions for the given object.
This may do nothing if the permissions do not
differ from the current settings. In any case,
this method is intended to return quickly.
Once the change takes place, it will be necessary
to run #check(IObject, String) to
guarantee that no invalid links are present.