Move flatMap to signal and add flatten

I've convinced myself that only signals should be flattenable, and
not events.

As signals have a current value, we can define a flattened signal as
taking on the 'value of the value' of the original signal.

With events there are no such clear semantics.

Note that flattening a signal of events (as opposed to a signal of
signals) pretty much does what you'd expect, but is not documented or
encouraged.