New client & server API func ShareEnvironment

ShareEnvironment shares the current environment with the given user.
Under the hood, it adds an environment user to state.
We shouldn't be passing through the display name.  This is set by the identity provider when they log in as a denormalised field (for local users anyway).