Fixed memory leak in MessageBus for scaleout

- Whenever we'd get a message we'd call save on the message which would force the message into the HasSubscription state despite its current state

Added facts to verify state changes correctly

- Had to modify existing tests to handle the new topic states correctly.

AddEvent needs to call SubscribeTopic to prevent groups from being deleted once they have been created (racey)

Fixed several more race conditions within the MessageBus

- Fixed condition that lead to concurrent subscribe cases working incorrectly
- Made topic death scenarios maintain state correctly
- Added InterlockedHelper to do a CompareExchangeOr
- Fixed existing tests to work with the new "dying" state of topics

Added new test to verify async threads subscribing simultaneously

Added Scaleout stress tests

#2070
Fixed code analysis issues
Reduce memory use for scaleout mappings

- Made ScaleoutMapping.LocalKeyInfo an IList instead of an IDictionary
- Made LocalEventKeyInfo.MessageStore a WeakReference
- This saves a significant amount of memory per ScaleoutMapping
Added comments to the MessageBus for the recent memory leak fix