Properly detect changes to groups made by user states

This pull contains some changes to both the user and group providers that normalizes the use of the ``__context__`` dict. In addition, the user state now clears the value in ``__context__`` (if present) which is used by ``user.list_groups``.

This allows for changes to group membership to be properly detected by the ``user.present`` state. Fixes #4336 and also #4351.