MXRoomState: Improve algorithm to manage room members displaynames disambiguation.
MXRoomState: Improve algorithm to manage room members displaynames disambiguation.

This improves the code in 2 ways:
 - speed: the loop in the memberName method took 4ms per member in a room like MatrixHQ. As there is a lot of membership changes in this room, there is very often a reset on the cache, which makes it a bit useless.
 - more robust against race condition: MatrixKit calls the memberName method on one of its processing queue. The new implementation of memberName does only read operations on ivars which is less risky than the write to `membersNamesCache` it did before. It should fix https://github.com/matrix-org/riot-ios-rageshakes/issues/132 (App crashed I don't know why, suspect memory issues / Crash in [MXRoomState copyWithZone:])

matrix-org/matrix-ios-sdk,matrix-org/matrix-ios-sdk,matrix-org/matrix-ios-sdk,matrix-org/matrix-ios-sdk,matrix-org/matrix-ios-sdk