!str #15076 Make foreach a terminal operation, returning Future[Unit]

This will change with the new DSL, but it is in the right direction and something we can ship in this sprint.
Refs #15076
perhaps wrap in something here so that weird mixups lead to test failure?