InMemorySubscriptionStorage: Fixed thread safety and performance issues

* Thread safety issues with the underlying lists of client Addresses
* Better performance with key lookups - O(1) vs O(n) for most ops
ConcurrentSet != ConcurrentBag. Bag allows duplicates.