fix join scheme bug

Limit the number of times `scheme()` gets called. Include a test that takes a very long time without this change.

Related to the effort in #317 
fixes #316 
this is not a great place for this TODO, it's a raco-wide issue. If operators are mutable, we cannot cache them and thus must re-compute them on demand. If operators are immutable, then mutating plans gets really hard...