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?
Why do we need a type for this, as opposed to just duck-typing?  i.e. if `signal(x)` works, then it is a signal source.