Introduce SignalSource

After importing Reactive, foldl would be broken for arrays because of the general type, this would also break reduce.

This change also includes some refactoring towards more Julian usage of types. Tested Interact with this change, `Widget <: SignalSource` keeps everything working.

@stevengj could you review this?
Yes. That was very annoying and prompted me to do this.