Wip 15755 15756 source sink patriknw

sorry, deleted the old branch by accident, previous discussion was at #15786 
The types I used are more precise than using bounds: toPublisher will give you an `Out`, not a supertype of it. I also encountered problems with subscribing to publishers when consistently going the bounds-route, so I consistently went the other way instead. This is at this point more a matter of taste, I think; let’s see whether scalac will offer better alternatives in the future.