+str #16093 Add missing runWith variant

This is exploring an alternative solution to #16093 and #16151.

It's moving the `MaterializedType` up to `Source` and `Sink`. It can be Unit for non-keyed things. This idea came from @hseeberger.

Made the concrete `Source` and `Sink` classes public again, so that they can be returned by the factory methods. I see no harm in having them public.