Modified lock system to use a ConcurrentDictionary instead of a standard dictionary. ConcurrentDictionary is designed to work with concurrent loads and should perform better than coarse locking on the entire data structure.

Added a ReleasePlayerLocks(IEnumerable<string> locks, string player) which will release all the named locks if the player currently holds them, using this will be better than using ReleasePlayerLocks(string playerName).

Changed GetLockList into an IEnumerable<KeyValuePair<string,string>> property called Locks. Also changed the only place this method was used to use the new property.

Signed-off-by: Martin Evans <martindevans@gmail.com>