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.
I think we should have `AddEnvironmentUser` not take a display name.  A different PR for that later.