Adding a new Rx BusNotifications API

The first cab of the rank is to expose error streams:
- MessageHasFailedAFirstLevelRetryAttempt
- MessageHasBeenSentToSecondLevelRetries
- MessageSentToErrorQueue
@SimonCropp The lock isn't for the OnNext, the lock is so the list of subscribers doesn't change while they're iterated to call the OnNext, so that's actually a read lock. Clone list vs quick lock while iterating list, they're both bad. And you should lock to clone anyway.I'm going for the simplest implementation that works, and isn't too bad with the locking.

@johnsimons Both of those implementations use locks. The first is just more complex than the second.