Prevent stack overflows when a Hub implements IHub

Also make Hub<T>.Clients settable for testing
- Setting Hub<T>.Clients to null will really set it to its default value

#3228
#3299