move coroutine observable into a new header
add make_variant that combines obversables into an observable of (fast_)variant