solveConcurrently
Solves goal according to options, returning immediately with a ReceiveChannel that every concurrently running branch of the search tree publishes its Solutions to as soon as it reaches one, rather than the Sequence returned by Solver.solve. Solver.solve on a ConcurrentSolver is implemented in terms of this method, bridging the channel back into a blocking Sequence.
As with Solver.solve, how many solutions are produced is capped by SolveOptions.limit -- once reached, every coroutine still exploring other branches is cancelled (see ConcurrentResolutionHandle) -- and the whole resolution is capped in time by SolveOptions.timeout.