Thread safe implementation of the Observable pattern which also supports roles