Clean up subscribeToExpressionChain

Why: I'm having still some stability problems with WhenAny
and looking into the code for processing the expression
chain I found it to be overly complex with nested subscribes
and disposes the logic of being hard to follow and debug.

How: Use idomatic RX patterns for dealing with nested
observables. Specifically the Switch method which will
switch between child observables when a root observable
generates and event and then flattens the event stream.

Result: All but three tests pass and I'm not sure what is
wrong with those. Perhapps you might take a look at the
three failing tests as the fix might be more obvious
to you.
Remove dead code
Merge branch 'subscribeToExpressionChain' of https://github.com/bradphelan/ReactiveUI
Don't propogate events for null children
Improve VariadicTemplates to use RX.CombineLatest

The locking code in WhenAny looks a bit risky. CombineLatest
from RX does the same thing.

With a few changes in ReactiveNotifyPropertyChangedMixin we can
reuse the code that we allready have and just punt the observables
to CombineLatest

Just have two tests failing now.

ItemsControlShouldGetADataTemplate
OFPShouldWorkWithINPCObjectsToo
Propogate the beforeChange field
Added note to failing test case that I disagree
Implement fix for event storm deadlock

What: Property setters that clone thier input will cause
an closed loop event storm with BindTo.

Why: The implementation of BindTo tries to be clever and detect that
the object tree of the target has mutated and then reapply the binding.
However if the leaf property is never unique in a reference sense then
the closed event loop doesn't terminate.

HowToFix: Only listen for changes to the object structure in the
parent of the leaf property not the property itself.
Merge branch 'subscribeToExpressionChain' of https://github.com/bradphelan/ReactiveUI into rewrite-whenany
Nuke incorrect assertion

INPC follows the same distinctness rules as everyone else.
Style fixups