Fix PermissionsI whitespace

In order to copy and paste code from the internal
Permissions implementation, I'm fixing the whitespace
which has been hanging around for ages.
Add Immutable permissions (See #8277)

Once permissions are transferred to the client, they should
no longer be mutable to prevent false expectations.
Change immutable implementation (See #8277)

Ice uses the default constructor of the PermissionsI
objects in a factory to first create objects and only
then does it fill in the fields, therefore it's not
possible to use the same `ImmutablePermissionsI` strategy
as done for internal permissions.
Fix PermissionsI.h whitespace
PermissionsI.__immutable for all SDKs (See #8277)
Passing permissions.cpp test for OmeroCpp
allowEdit and allowAnnotation in all SDKs
Store current client in Details of all SDKs (See #2874)

After refactoring the C++ and more significantly the Python
model object factory logic, it's possible to have the client
instance set on the DetailsI of all model objects as they
are returned from the server

This includes the alphabetical ordering of DSL types to make
it easier to compare different implementations of, say,
omero.ObjectFactoryRegistrar.py.
Add specification/test to top-level .classpath

The top-level eclipse project was very red because
the class "spec.AbstractTest" could not be found.
Adding in components/specification/test fixes it.
Minor perf. optimization in IceMapper for Details
Set context fields to Details (See #2874)

Note: not all of the const-ness of these fields
is as ideal as I would like it. This comes from
various reasons (not the least of which is probably
my own misunderstanding). For the moment, "client
developers beware" -- no fiddling with the values
in these context instances (which is of course
always the case for Python)
Calculate write permissions (#8277)

This commit adds two new calculated fields to Permissions:
disallowAnnotate and disallowEdit (with defaults of false
so that new objects *can* be annotated and edited).

The logic here is hard-coded in CurrentDetails but will
be moved to the newly created "WriteStrategy" which can
be re-used by BasicACLVoter.
Passing chmod tests (See #8277, #8278)

These are simple tests which already pass when there is not much data.
The intent is to remove the changing of each row (#8278) and then have
these fail until #8277 is implemented.
Remove chmod of each row (See #8278)
Post-processing permissions via `BasicACLVoter` (See #8277)
Add ChmodStrategy to re-use changePermission logic (See #8278)

Most of the chmod logic was stored in AdminImpl. In order to re-use
this in ChmodI, it needed to be refactored out. At the same time,
also added an etc/omero.properties property for extensibility:

    omero.security.chmod_strategy
Add omero.cmd.ChmodI implementation (See #8278)

To allow asynchronous calling of chmod, a strategy like ChgrpI needs to
be followed. This commit will return a status with many steps when/if it
is necessary to check data for the chmod. I.e. consumers may want to
block if the chmod will be fast but background the handle if there are
many checks to perform.
Minor cleanups to HandleI
Add a `CHMOD(<perms>)` event log in ChmodStrategy (Fix #8210)
Refactor blitz managed context fixture

With this commit it's far easier to create a new
fixture for logging in as a new user. (There was
an issue with forgetting to login back in as the
original user).

With this commit, the ChmodITest for checking
cross-linkages is properly failing.