allow retries when handler throws SerializationException

fixes #2384
Persistence is not required for SendOnly endpoints, fixes #2367
Throwing a better exception when performance counter instance name limit is reached, fixes #2352
Merge pull request #2467 from Particular/Issue_2352

Better exception when performance counter instance name limit is reached
Disposing of MessageQueue
DisposeManaged not needed
Performance counter can hang

This commit attempts to deal with the issues raised by users that when performance counter are newed up can hang the process.
This seem to occur mostly when running NServiceBus in IISExpress 8.

We are now doing the performance counter check (counter.CounterType) in a timed bombed thread that if it doesn't return within 2 seconds we mark the counter as not "healthy".

Took this opportunity to also refactor the performance code to centralise it all in the PerformanceCounterHelper class.
Introduced the concept of ErrorSubscribers
Changed to use IObservable streams
Moved types around

Rename to BusNotifications
Added doco
Made ObservableList disposable
Checking for null body
Renaming to BusConfiguration
Added some thread safety to internal observable implementation
Added brackets to force build
Unsubscribing streams in AT
Changed SByte.MaxValue to 128 to be more readable
Renamed things to what they actually are
Moved back to property injection

The ctor injection broke down when DisableFeature<ForwarderFaultManager>() is called because the FaultManager is null!
Switching to read write lock
Merge pull request #2462 from Particular/serializationException

allow retries when handler throws SerializationException