myrialang: use cardinality when deciding which child to broadcast

This PR implements some very basic cost-based decisions in one case: choosing which child to broadcast in a cross product. This required very little logic, but some work to make sure that the cardinality estimates are actually available.

Also:

* testing of several cases of interest to me.
* various cleanups
* I discovered more `self.assertBLAH` in Python `TestCase` objects, so I adopted them project-wide. The main reason to do so is better error messages when the tests fail.